엘릭서 콜렉션 정리
Elixir의 여러가지 콜렉션 - 리스트, 튜플, 키워드 리스트, 맵 - 들을 표 형식으로 정리하여 한눈에 비교하기 쉽게 구성하였다. 해당 내용은 elixirschool 내용에 콜렉션 요소를 추출하는 방법에 대한 내용을 일부 보강한 것이다.
절대 일일이 찾기 귀찮아서 정리한게 아니다
구분 | list | tuple | keyword list | map |
---|---|---|---|---|
설명 | 값들의 간단한 모음 | list와 비슷하나 연속 공간에 저장 | 첫번째 원소가 atom이고 길이 2인 tuple들의 list | key-value 저장소 atom 외에 다른 타입의 key도 가능 |
form 1 | [3.14, :pie, "Apple"] |
{3.14, :pie, "Apple"} |
[{:foo, "bar"}, {:hello, "world"}] |
%{:foo => "bar", "hello" => :world} |
form 2 | [foo: "bar", hello: "world"] |
모든 요소가 atom인 경우 %{foo: "bar", hello: "world"} |
||
추출 | Enum.at(list, 0) = 3.14 |
elem(tuple, 1) = :pie |
atom key로 추출 kw[:foo] = "bar" |
key로 추출 map["hello"] = :world |
추출2 | hd/1 , tl/1 함수로 head와 tail 추출 |
atom key인 경우 다음 가능 map.foo = "bar" |
||
기타 | list의 길이를 구하는데 $O(n)$ 시간이 걸림 | 길이는 쉽게 구하지만 수정을 위한 비용이 커짐 | 성능 속성은 list와 비슷 | 중복 key가 있을 경우 마지막 값으로 결정 |
함수 option 인수 및 반환값
함수에 option 인수를 전달하는데 keyword list를 주로 사용한다.
함수가 추가 정보를 함께 반환하는 수단으로 보통 tuple을 사용한다.
iex> File.read("path/to/file")
{:error, :enoent}
list 추가 삭제
리스트 길이를 구하는데 $O(n)$ 시간이 걸리기 때문에, 보통 리스트 뒤보다 앞에 추가하는게 더 빠르다.
["Cherry" | [3.14, :pie, "Apple"]] # 앞에 추가
[3.14, :pie, "Apple"] ++ ["Cherry"] # 뒤에 추가
--/2
로 리스트의 기존 값을 뺀다. 중복 값이 있는 경우 오른쪽 요소 별로 왼쪽에서 처음 만난 요소만 지운다.
iex> ["foo", :bar, 42] -- [42, "bar"]
["foo", :bar]
iex> [1,2,2,3,2,3] -- [1,2,3,2]
[2,3]
map 추가 삭제
기존에 있는 키의 값을 갱신할 때는 |
연산자를 사용한다. 새로운 키를 추가하려면 Map.put/3
함수를 사용한다.
iex> %{map | foo: "baz"}
%{:foo => "baz", "hello" => :world}
iex> Map.put(map, :integer, 42)
%{:foo => "baz", "hello" => :world, :integer => 42}
변수를 맵의 키로 사용할 수 있다 (elixir 1.2 이상).
iex> key = "hello"
iex> %{key => "world"}
%{"hello" => "world"}
— END OF POST.