3 min read

엘릭서 콜렉션 정리

엘릭서 콜렉션 정리
Photo by Martin Adams / Unsplash

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.