使用列表和矩陣所以這個演示將看看列表和矩陣的一些基本特徵。 所以我將從列表開始。 我將獲得一個新的腳本編輯器窗口。 同樣,鍵盤快捷鍵是 Ctrl+T。 我會調整大小並重新排列。 讓我先把日誌拿到日記本前面。 我將創建一個變量,我將調用我的列表。 我將分配列表函數的結果。 所以單詞列表開括號,我將使用變量a,b。 然後我將計算 So that's sqrt 的平方根,然後在括號中計算。 我將繼續並重新格式化,以便在那裡獲得大寫和間距。 我將運行腳本。 因此,日誌中顯示的只是已分配包含三個元素的列表的信息。 如果我將鼠標懸停在我的列表上,我們會看到它正在存儲我輸入的未評估的項目。 所以它是兩個變量和函數平方根 在我的腳本編輯器窗口的新行中,我將請求對列表中的項目進行評估。 所以我將鍵入 eval list open 括號我的列表。 我將只運行那條線。 所以我看到了評估結果。 現在,我的清單仍未評估。 因此,如果我想使用 eval 列表的結果,一件事是將評估列表的結果分配給一個新列表。 不過,還有其他一些方法可以使用下標來處理列表中的已評估項目。 所以在我談論這個之前,讓我先談談對列表的下標。 所以我會去一個新的線路。 我將輸入我的列表打開方括號。 我將鍵入 a 以提取列表中的第二項。 如果我只運行那條線,我看到的是未評估的項目。 那麼如果我想要評估結果呢? 好吧,我實際上可以在這裡回到我的第二行。 我可以請求評估我的列表,然後下標該結果。 所以我會放開方括號,a 在那裡,關閉方括號。 我將再次運行該行,使用桌面計算機鍵盤最右側數字小鍵盤上的 Enter 鍵。 因此,我只是在評估列表下標以獲取該結果。 我們談到了修改列表。 所以我想去一個新的線路。 我將使用插入。 所以 insert into 會在原地修改列表。 所以我會打開括號。 我要修改什麼列表? 嗯,它存儲在我的列表中。 這是第一個論點。 我要添加什麼? 我將添加約翰的名字。 所以這是一個字符串。 如果我不把那個逗號放在那裡並且不提供第三個參數,它只是把它放在列表的末尾。 但是我將使用逗號,並且我將鍵入 a 作為可選的第三個參數,以將其置於第二個位置。 然後,我將運行那條線。 並且 insert into 實際上不會向日誌返回任何內容。 但是,如果我將鼠標懸停在它出現在腳本中的任何位置上,您可以看到它已被修改為將名字 John 放在第二個位置。 現在,假設我有一個列表,例如,它可能是由 JSL 函數返回給我的,或者它被用於收集用戶輸入。 我需要在列表中找到一個項目,以便我可以刪除它。 我知道它 - 好吧,我不知道它在列表中。 我想先查詢它是否在列表中。 然後,如果是,我希望能夠將其刪除。 所以我要創建一個變量來存儲項目 John 的位置。 我會稱它為 pos。我將分配 contains 函數的結果。 所以我們已經看到包含字符串。 現在它包含一個列表。 我們正在我的列表中查找字符串 John,當然它會區分大小寫。 如果我運行該行,返回並存儲在變量 pos 中的結果是 And 所以如果我想從列表中刪除它,例如,我可以繼續並從左括號中鍵入 remove。 我們正在查看我的清單。 而且我不想只刪除最後一項,如果我在第一個參數之後沒有提供任何東西,我會得到什麼,我將使用變量 pos。我跑那條線。 這將返回一個列表,其中刪除了任意數量的元素。 默認情況下,我們從第二個參數中指定的位置開始取一個。 所以我得到一個包含該字符串的列表。 如果我想在腳本的其他地方使用列表中的那個元素,我實際上可以將該結果分配給它自己的變量。 我也可以從返回的列表中提取它,方法是用一個 So let me 下標它——現在,我的列表不再包含 John。 我要再次運行我的線路。 存儲在 pos 中的值仍然是相同的。 我將運行 line 並返回不在列表中的字符串。 如果我將鼠標懸停在我的列表上,我們可以看到它已恢復為之前的值。 讓我們稍微談談矩陣。 我將在日誌中右鍵單擊以清除它,然後選擇腳本編輯器窗口中的所有內容並將其刪除。 所以我將從模擬人開始,這將是我矩陣中的行。 這些人中的每一個都會擲骰子五次,一個六面骰子。 那將是我的專欄。 我將使用隨機數生成器生成這些,但我將從一個特定的種子值開始,這樣如果你跟著,你會得到完全相同的隨機數。 我們將使用一個名為 j 的函數,它生成一個具有指定行數和列數的矩陣。 這些是它的前兩個參數,然後是矩陣中的值,這是第三個參數。 因此,我將使用值為 的隨機重置函數 並且,這只是為隨機數生成器指定我的起始種子。 所以我會繼續運行它。 然後在新的一行上,我將創建一個變量 m,它將分配 j 函數的結果。 同樣,我從模擬人的行數開始,然後是列數,將六面骰子滾動五次。 我將使用帶參數的隨機整數函數——我們將開始並選擇隨機數,直到 再一次,我可以重新格式化它只是讓它看起來有點——哎呀,我運行它而不是重新格式化它。 我仍然可以重新格式化它。 我們去吧。 所以它現在也運行了。 如果我們把日誌放大一點,你可以看到我有那個逐列矩陣。 以及如何引用該矩陣中的元素? 好吧,我們使用下標。 所以我要去一個新的線路。 也許我對第五個人第三次擲骰子的結果感興趣。 所以我要給變量名 m 下標,然後是 m,然後是方括號。對於行號,逗號,對於列號,關閉方括號並運行該行。 所以第三次滾動的第五個人滾動了 a 我們實際上可以驗證這一點。 所以有一,二,三,四,有第五行,還有第三次擲骰子。 現在,如果我想查找整行或整列怎麼辦? 好吧,在這裡換一個新行——實際上,我將使用同一行,只是替換我行中的下標假設我想要所有行所以我輸入第一個下標。 然後在逗號之後,我將輸入 a 表示我不希望它選擇任何特定列。 這將是每一列的行。 我可以運行它。 這給了我所有的價值。 如果您想向上滾動,我們可以驗證這些確實是 row 中的值 所以實際上,這就是我們返回的值。 我可以做同樣的事情來選擇一個列,我只需要一個用於行下標的列,然後是任何列號。 但是讓我們假設我想擺脫一整行。 假設我決定第三個人以某種方式在他們的擲骰子上作弊。 所以我要用 a 和 a 為 m 下標,然後在分號之前,我要為該行分配一個空矩陣的值。 所以我只是打開和關閉方括號。 如果我運行該行,返回到日誌的是一個空矩陣。 如果我將鼠標懸停在 m 上並且您想計算行數,您會看到現在只有九行。 現在,再一次,只是在玩一些我們可以用矩陣做的事情,讓我們假設每個角色剩下的九個人第六次死去。 所以我要在原地做這件事。 接線員,我要 m。 然後賦值運算符將是 Concat 所以它是雙豎線和一個等號。 沒有空格,因為我們不能在這些具有多個字符的運算符的組件之間有空格。 我將再次使用 j 函數。 而且我們只有九行。 我想要一列。 我將再次使用隨機整數。 對於它的論點,它仍然是一個六面骰子,所以我將提供所以這將通過在我運行該行時添加第六列來修改 m。 所以你可以看到現在我們在矩陣中有六列。 讓我們清除日誌。 我將重新開始為 m 賦值。 我不會再使用隨機數了。 所以我要清除腳本編輯器窗口的內容。 我將初始化一個計數器變量 i 並為其賦值 所以我將運行它來初始化它。 然後在新的一行中,我將為 m 分配一個不同的矩陣。 所以 m 將被分配 j 函數的結果。 它將有五行。 該矩陣將有五行五列,並且從矩陣的每個元素開始將 i 遞增。 因此,我將使用 i plus plus,即就地添加的後增量運算符。 我會繼續運行它。 所以我有一個矩陣。 請注意,我們是逐行遞增,而不是逐列遞增。 這對於我們將要看到的另一種下標方法很重要。 所以我們逐行遞增。 現在,如果我想要一個真正上升到 Well 的序列怎麼辦,當然有很多不同的方法可以做到這一點。 但是一個快速的方法就是將我剛剛創建的矩陣中的每個元素相乘,我們可以再次對這些操作進行矢量化。 我不必遍歷矩陣。 我只是分配-- 我將做另一個就地分配-- m 然後星號等於,所以我們不必在原地進行乘法運算。 但我不會創建一個新變量,而是這樣做。 再說一次,我不必循環。 它將逐元素乘以所有內容,然後我運行它。 所以這個矩陣從 到 以現在為增量,創建這個矩陣的另一種方法是分兩步,從索引函數開始。 所以我要清除腳本編輯器窗口中的內容。 我也會繼續清除日誌。 在腳本編輯器窗口中,我將輸入 m。 這將被分配由索引函數產生的值——索引開括號。 我們將從我們開始計算可選的第三個參數,我將在這裡使用增量。 所以我們將通過所以這是創建我們擁有的矩陣的第一步。 所以我們使用索引函數創建一個行向量。 然後,我可以塑造這個。 所以我要去一個新的線路。 我將再次覆蓋 m 。 所以 m 將是 shape 函數的結果,它將 m 作為其第一個參數並將其尺寸更改為具有 5 行和 5 列。 你必須非常小心這個形狀函數。 如果在這種情況下您的行向量與我在此處指定的方陣不匹配,如果您使用 shape 指定的矩陣太小,JMP 將截斷該向量。 或者,如果您指定更大的矩陣,它將開始重複向量。 所以在使用形狀功能時要小心。 所以我想運行它。 還有那個方陣,從 到 以現在為增量,除了在 JMP 中通常有很多方法可以做所有事情之外,我想這樣做的部分原因是談論另一種下標方式。 我們已經看到了逐列下標。 我想談談你有時會看到的單下標。 因此,如果我想——我們可以使用 contains 函數——我們已經看到它帶有字符串。 您可以將它與列表一起使用。 我們可以將它與矩陣一起使用。 如果我想在矩陣中找到當前存儲的數字的位置 m,那麼,如果我在描述,我會說,好的,它是行列所以我會使用逗號下標。 但如果我讓 JMP 為我找到它——那麼我將只使用包含。 同樣,在實踐中,您的腳本可能會將此結果分配給一個變量。 我在這裡不需要這樣做——包含然後 m 逗號 JMP 不會給我它會給我一個單一的值。 那麼,這個單一值是如何工作的呢? 單值下標——所以如果我回來了——我將在此處換行並鍵入 m,然後輸入帶有單值下標的方括號並運行它。 那就是單值下標將我的矩陣視為行向量並從第一個位置開始計數。 因此,當我們返回日誌查看索引函數的結果時,單個下標將其視為行向量並逐行計數,就像我們逐行遞增一樣,以獲取該值的位置。 當我們稍後使用 JMP 將單個下標返回給我們的矩陣時,我們將看到其他示例。 我們在這裡要做的最後一件事只是一種任意計算,以說明有些函數可以將矩陣作為參數,計算函數——所以我們已經看到了形狀函數和包含。 但是我要在這裡換行,然後輸入 log 然後 m 作為它的參數除以關於這個例子的另一件事——好吧,讓我運行它。 然後我會告訴你關於這個例子的另一件事。 所以我剛剛對每個元素進行了計算,然後除以。但我只想提到的另一件事是,在 JSL 中,函數可以將函數作為參數。 我們將始終看到這一點。 我們已經看到了一些例子。 所以這個除法運算符,這實際上是以 m 的對數作為參數的除法函數,然後我不需要計算 m 的對數並將其存儲在變量中以將其提供給除法函數。 我可以直接進行該計算。 再一次,如果我把函數寫出來,這看起來會是開括號。 用逗號和右括號替換運算符。 所以我不必提供存儲這些值的變量。 我可以在運行除法函數時計算它們。 因此,這些是列表和矩陣的幾個示例,以及我們可以使用這些特定類型的數據結構的一些方法。