一、陣列基本概念
在Scratch 程式內,要存放三位同學的成績,可利用宣告三個變數「成績01」、「成績02」、「成績03」來儲存成績資料,但如果班上有30 位同學的成績,是否就要準備30個同類型的變數來存放成績資料呢?其實對於存放多個同類型資料,陣列是最佳的資料儲存方式。
宣告三個變數「成績01」、「成績02」、「成績03」來儲存成績資料
利用陣列可簡潔有效率的存放資料。
陣列就是用更簡潔、更有效率的方式來存放資料。
將陣列想像成一個櫃子,這個櫃子有一連串的儲存格,儲存格可稱為項目或元素(Element),每個儲存格都有一個索引(Index)編號,功能類似門牌號碼,可以幫助我們存取特定的儲存格。
例如下圖是一個存放成績資料的陣列示意圖,裡面有N 個元素,索引編號為3 的元素,其值為55(儲存格資料的內容)。
實作演練
從【變數】中建立一個清單,名稱為成績陣列
請點選左下角的 + 號,增加三個元素:
實作演練-替換
「成績陣列」建立完成,接著該如何將資料存放到陣列的特定元素內呢?將數值資料88存放到「成績陣列」的第一個元素內,可使用右圖的語法:
使用同樣的語法,替換第2格、第3格「成績陣列」元素的值分別為90、80,結果如右圖:
實作演練-讀取
如果要讀取「成績陣列」中某個元素的值,只要指定該元素的索引值即可,方法如右:
讀取「成績陣列」中三個元素的值,並且使用「說出」指令,將資料顯示在【舞台區】。
實作演練-刪除
要刪除「成績陣列」中某個元素的值,使用刪除指令並且指定欲刪除元素的索引值即可,例如下圖指令可將第二項元素刪除,後面的元素會自動向前遞補。
想刪除全部的元素,也可使用以下指令刪除。
實作演練-插入
若要在陣列內插入新的元素,使用插入指令並且指定插入的索引位置,例如下圖指令會將數值95插入到陣列的第二項,原有的陣列元素會自動向後移動。
實作演練-使用程式新增資料
如果要增加的資料不是很多,可以使用添加指令增加資料,例如下圖程式片段增加三個元素到「成績陣列」最末端。
實作演練-匯入外部文字檔案(2)
在成績陣列上點選滑鼠右鍵,選擇匯入,再選取剛才編輯的檔案 data.txt,就將剛才輸入的十筆資料匯入成績陣列內。
二、二維陣列
如果遇到大量資料時,也可將資料整理成二維陣列的存放方式,例如右圖就是一個三橫列五直行的二維陣列。
若要讀取資料時,指定[橫列索引] [直行索引],就能讀到資料。
例如:要讀取2號同學的第3次作業成績,指定[2][3](橫列索引=2、直行索引=3)就會找到89這個數值。
陣列的好朋友-重複結構
右圖有一個成績陣列裡面有10 筆資料
若要將全部資料顯示出來,可以使用如右圖的十行程式。
改用重複結構(迴圈敘述)來寫(1)
宣告一個索引變數,設定索引變數初值是1,代表稍後的迴圈將會從陣列的第一個元素開始存取。
改用重複結構(迴圈敘述)來寫(2)
加上重複10次的迴圈指令,並且在結構的尾端加上遞增索引變數的指令。
改用重複結構(迴圈敘述)來寫(3)
再把希望重複的指令,放到迴圈指令內,並且藉由索引變數來控制要存取的陣列元素。
改用重複結構(迴圈敘述)來寫
右圖是以上程式對應的流程圖。這樣的程式寫法,經常用來快速存取陣列的元素。
三、迴圈
以上程式中,迴圈的重複次數(常數10)剛好與陣列的元素數量是一樣的;因此,也可以將常數10替換成陣列的長度(如右上圖),效果也是相同的。
以上程式利用重複結構逐漸遞增索引變數的值,然後用讀取指令搭配索引變數(右下圖),顯示出成績陣列內的第1個到第10個元素值。
請觀察程式內容,過程中索引變數是如何變化的呢?索引變數最後會變成多少?
答案
因為索引變數剛開始的時候是1,接著進入迴圈重複10 次,每次在迴圈結構內執行到最後一行都會將索引變數遞增1 單位,索引變數會從1、2、3、⋯⋯,一直變化到10、11。
當索引變數是1、2、⋯⋯、10 的時候,就會顯示對應的成績陣列元素值,但是當索引變數最後變成11,此刻迴圈剛好也終止了,所以就不會再把陣列的第11 個元素值顯示出來。
如果要顯示陣列內第3、4、5元素,程式要如何修改呢?
想如果要顯示陣列內第4、6、8元素,程式要如何修改呢?
以上介紹了兩種顯示陣列內資料的方法,如果陣列內資料增加到1000 筆,該如何修改這兩種程式呢?請同學們比較這兩種程式寫法的優點與缺點,想想看哪一種方法會比較好呢?