使用列表和矩阵所以这个演示将看看列表和矩阵的一些基本特征。 所以我将从列表开始。 我将获得一个新的脚本编辑器窗口。 同样,键盘快捷键是 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 的对数并将其存储在变量中以将其提供给除法函数。 我可以直接进行该计算。 再一次,如果我把函数写出来,这看起来会是开括号。 用逗号和右括号替换运算符。 所以我不必提供存储这些值的变量。 我可以在运行除法函数时计算它们。 因此,这些是列表和矩阵的几个示例,以及我们可以使用这些特定类型的数据结构的一些方法。