Scratch中间接实现多维数组支持(一)

目前,Scratch 3.X不支持多维数组。可是,有一些方法可使用当前的列表(一维数组)来模拟实现它们。算法

二维数组方法1:

假设有以下一个二维数组:数组

Scratch中间接实现多维数组支持(一)

其中,简单变量row和col分别用来表示未来访问该数组的行索引与列索引。因而,能够定义以下的一个Scratch向量array2d来表示上述的二维数组:ide

Scratch中间接实现多维数组支持(一)
Scratch向量array2d来表示上述的二维数测试

因而,看下面代码:blog

Scratch中间接实现多维数组支持(一)
访问二级数组索引

最后一句代码意思是访问上面数组中的第row行第col列中的元素。所以,输出结果是8。

[原理]易见,上面表示中“item row of array2d”是基本的列表操做积木,意思是访问列表的第row项——对应于二维数组表示中的第row行;而“letter col of ...”是字符串操做积木,意思是检索这个字符串(列表中的第row项)中的第col个字符——对应于二维数组表示中的第row行的第col列位置处的元素。
作用域

所以,很明显:这种表示方法的局限性之一是,二维数组(或者说是一个矩阵)中的元素只能是长度为1的单个字符或者数字。字符串

还有一个局限性:很难再修改此矩阵中的某位置的元素。固然,能够直接使用这个数组中的某一行——即要修改的话把一行所有修改,这个操做经过最基本的列表积木(replace item x of array2d with newvalue)便可完成。再分析下去,使用这种思路,能够先把不须要修改的位置的元素使用上面方法逐个提取出来,而后按该行中元素原来的顺序使用字符串链接运算积木再链接起来。经过这种繁琐的操做也能够最终实现修改一个二维数组(矩阵)中某位置的元素的值的目的。it

只支持只读操做的话,说使用列表可以表示一个二维数组比较勉强。下面,咱们基于上面的算法分析来建立一个修改二维数组的自定义积木。class

使用自定义积木来模拟二维数组修改操做

Scratch中间接实现多维数组支持(一)

模拟二维数组修改操做的自定义积木

下面咱们来测试一下,为此,定义以下图所示的列表和辅助变量:

Scratch中间接实现多维数组支持(一)
测试用变量

在上图中,咱们定义了一个二维数组阵列(3行7列,且根据前文介绍,每个数组元素是长度为1的字符),再用图更直观地描述一下的话,以下所示:
Scratch中间接实现多维数组支持(一)

二维数组矩阵

Scratch中的变量支持功能很是有限。在上面例子中,为了实现自定义积木,使用会使用到一些临时变量,这些也须要显示于舞台上(固然也能够隐藏它们)。还好,在目前的3.10.2版本中,变量名前由系统自动添加一个显示做用域的角色名称,比较于之前已经有必定进步了。

下面的自定义积木的调用:

Scratch中间接实现多维数组支持(一)
调用自定义积木

上面这一句调用的意思是,把上面二维数组的第3行第4列的元素修改成新元素5。经过前面积木代码中的say积木你可以很容易检测这一结果。

关于删除二维数组元素

由于本文方案表达的特殊要求,因此,要想使用这种方式实现二维数组元素的完全删除的话是不可能的。可是,咱们仍然能够“委婉”地实现——例如经过上面的替换式修改方法把某个指定元素修改成例如“-1”、某一个极大值或者极小值或者某一个特殊字符等即可以暗示此位置的上元素被删除了。

小结

在本文介绍的这种二维数组表示方法中,最大的弱点是数组每一位上的内容的长度只能为1!在接下来的文章中,我会介绍另外一种更为通用的、功能更为强大的使用Scratch中列表表示一个二维甚至是多维数组的方法。

相关文章
相关标签/搜索