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는 몇 가지 기본기를 연습하려고 해요. Elyse에게는 다루고 싶은 카드 덱이 하나 있어요.
조금 더 쉽게 하기 위해 1부터 10까지의 카드만 사용해요.
주어진 덱에서 index 위치에 있는 카드를 반환하는 getCard 함수를 구현해요. 인덱스가 덱에 없으면 Nothing을 반환해요.
getCard 2 ( Array.fromList [ 1, 2, 4, 1 ] )
--> Just 4
getCard 6 ( Array.fromList [ 1, 2, 4, 1 ] )
--> Nothing
index 위치의 카드를 주어진 새 카드로 바꾼 덱을 반환하는 setCard 함수를 구현해요.
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 ]
index 위치의 카드를 제거한 덱을 반환하는 removeCard 함수를 구현해요.
주어진 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
Exercism에 가입하고 Elm 트랙을 개념 28개연습 문제 110개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.