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中列表表示一個二維甚至是多維數組的方法。

相關文章
相關標籤/搜索