ElmのArrayは、同じ型の値を0個以上保持できる、高速でイミュータブルなコレクションです。
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