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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scratch中间接实现多维数组支持相关的知识,希望对你有一定的参考价值。

简介

在上一篇文章Scratch中间接实现多维数组支持(一)中,我们介绍了使用Scratch列表表达二维数组的一种方法,注意到此种方法有两个问题:
(1)仅能表达二维数组

(2)数组中的元素长度仅能为1

在本文中,我们将介绍一种更为通用的使用列表表达二维(甚至是多维)数组的一种方法。希望朋友们能够真正掌握这种方法以便在复杂程序开发中补充Scratch列表的不足。

存储形式

在本文介绍的方法2中,列表中的每个项都是数组中的一个项。这样就能够允许数组项包含多个字符,而且有可能使得数组支持多个维度。

先看形式表达上的简单举例,最后来归纳概念与有关算法。

技术图片

上面是最直观不过的一个二维数组表示形式。同时,这个数组共有2行,每一行共有4个元素,分别存储人物的编号、姓名、性别与年龄4种信息。下面,我们通过两种典型操作——检索(搜索)与修改(编辑)来对比上一种方法。另外,上图中几个私有变量都是在操作数组过程中起辅助作用的。

[小结]在本文介绍的第二种表示方法中,列表中每一项的前两个字符是固定不变的,含义也十分明确——分别表示二维数组的行数(例如N)和行号与数组实际数据的间隔字符(本例中使用冒号“:”这个间隔符一般是一个固定字符即可,未必是冒号)。间隔符后面是元素内容。例如,本例中第2行第5列(即上面列表中第5个元素)全体内容为“2:0102”,实质对应的二维数组元素为人物的编号“0102”.

1.数组修改操作

技术图片

数组编辑操作

这段代码中,变量三个变量都是起辅助作用的,意思不言自明,分别表示要操作的数组阵列的行(row)、列(col)与数组中总列数(Columns)。

总体来看,使用Scratch列表的“replace...”积木即可完成修改指定位置的二维数组元素值的目的。

上面代码执行后,数组内容变成如下图所示:
技术图片

修改后数组中第2行第2列新内容

2.数组检索操作

相对于上文中提到的方法,本文方法中二维数组检索元素麻烦一些。

针对上面修改后的内容对应的元素,可以使用如下代码把这个元素搜索并显示出来:

技术图片
搜索数组元素代码

执行后角色将会说出对应的数组元素的新内容为“刘备名字”。

接下来,整理一下上面的检索代码,把它做成一个自定义积木形式(前面的修改操作相当简单,有兴趣的读者可以自行制作一下):

技术图片
自定义积木检索数组元素代码及调用示例

上面调用示例是搜索数组中第2行第3列所在位置元素值,并显示出来,结果对应于性别值“男”。

小结

本文介绍的方法具有普适性,可以进一步扩大思路,使用多个间隔符方法来使用列表实现3维甚至是多维数组!有兴趣读者可以尝试一下。

以前的文章中我曾经多次提到,Scratch这个工具实现的是编程中最最基本的功能支持,稍微扩展性的功能可能需要开发者自己来通过自定义积木实现。通过本文中的字符串操作大家已经看出这一点,它连常见的其他高级语言中的子字符串操作运算都没有提供直接支持,也正是由于这一点,实现起本文及前文中的编程相对麻烦一些。

以上是关于Scratch中间接实现多维数组支持的主要内容,如果未能解决你的问题,请参考以下文章

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

icarus verilog 中的多维数组端口支持

机器学习基于组平均的AGNES算法,支持多维数组,距离用欧式距离

07-JAVA一维数组及多维数组

js数组排序,支持正反排序以及多维度排序

PHP解析ini文件支持多维数组解析