在 Elm 中,Array是一種快速且不可變的集合,可以存放零個或多個相同型別的值。
與List不同,List屬於預設匯入,而Array模組必須明確匯入,可使用import Array或類似寫法。
陣列可以這樣定義:
import Array exposing (Array)
empty : Array Char
empty = Array.empty
singleValue = Array.fromList [ 5 ] --> Array Int
repeatSingleValue = Array.repeat 2 5 --> Array.fromList [ 5, 5 ]
initialiseFromIndex = Array.initialise 3 (\index -> index * 2) --> Array.fromList [ 0, 2, 4 ]
initialisefromList = Array.fromList [ "a", "b", "c" ] --> Array.fromList [ "a", "b", "c" ]
使用Array.push可以將元素加入陣列:
twoToFour = Array.fromList [ 2, 3, 4 ]
oneToFour = Array.push 1 twoToFour --> Array.fromList [ 1, 2, 3, 4 ]
使用Array.get可以取出陣列中的元素:
sixSeven = Array.fromList [ 6, 7 ]
Array.get 0 sixSeven --> Just 6
使用Array.set可以設定陣列中的元素:
sixSeven = Array.fromList [ 6, 7 ]
Array.set 1 8 sixSeven --> Array.fromList [ 6, 8 ]
陣列是透過 Array 模組中定義的函式來操作的。
oneTwo = Array.fromList [ 1, 2 ]
Array.length oneTwo --> 2
身為見習魔術師的 Elyse,需要練習一些基本功。她有一副牌,想要好好地操作它們。
為了讓事情簡單一點,她只用 1 到 10 這幾張牌。
實作 getCard函式,回傳指定牌組中位置為index的牌。如果index不在牌組中,就回傳 Nothing。
getCard 2 ( Array.fromList [ 1, 2, 4, 1 ] )
--> Just 4
getCard 6 ( Array.fromList [ 1, 2, 4, 1 ] )
--> Nothing
實作 setCard函式,回傳將牌組中位置為index的牌更換成新牌之後的牌組。
如果index不在牌組中,就回傳原本的牌組。
setCard 2 6 ( Array.fromList [ 1, 2, 4, 1 ] )
--> Array.fromList [ 1, 2, 6, 1 ]
setCard 6 6 ( Array.fromList [ 1, 2, 4, 1 ] )
--> Array.fromList [ 1, 2, 4, 1 ]
實作 addCard函式,回傳加入新牌之後的牌組。
addCard 8 ( Array.fromList [ 5, 9, 7, 1 ] )
--> Array.fromList [ 5, 9, 7, 1, 8 ]
實作 removeCard函式,回傳將位置為index的牌移除之後的牌組。
如果給定的index不是牌組中的有效索引,就回傳原本的牌組。
removeCard 2 ( Array.fromList [ 3, 2, 6, 4, 8 ] )
--> Array.fromList [ 3, 2, 4, 8 ]
removeCard 2 ( Array.fromList [ 3, 2 ] )
--> Array.fromList [ 3, 2 ]
實作 evenCardCount函式,計算牌組中有多少張偶數牌。
evenCardCount (Array.fromList [ 3, 8, 4, 5, 1, 6, 10 ] )
--> 4