En

Enum 에서 Elixir

98개의 연습 문제

Enum 소개

Enum은 enumerable을 다루기 위한 다양한 알고리즘을 제공하는 아주 유용한 모듈이에요. 다음과 같은 기능을 제공해요.

그리고 훨씬 더 많아요! 전체 목록은 Enum 모듈 문서를 참고해요.

Enumerable

일반적으로 _enumerable_은 반복할 수 있는 모든 데이터, 즉 컬렉션이에요. Elixir에서 enumerable은 Enumerable 프로토콜을 구현한 모든 데이터 타입이에요. 다음과 같아요.

아직 이걸 다 몰라도 걱정하지 마세요.

누구나 자신만의 데이터 구조에 Enumerable 프로토콜을 구현할 수 있어요.

리듀스

Enum.reduce/2를 사용하면 enumerable 전체를 하나의 값으로 _리듀스_할 수 있어요. 그러려면 _누산기_라는 특별한 변수를 사용해요. 누산기는 각 반복 사이의 리듀스 중간 상태를 담고 있어요. 덕분에 enumerable을 다루는 가장 강력한 함수 중 하나예요. 다른 많은 특수한 함수들은 더 일반적인 reduce로 대체할 수 있어요. 예를 들어...

최댓값 찾기:

Enum.max([4, 20, 31, 9, 2])
# => 31

Enum.reduce([4, 20, 31, 9, 2], nil, fn x, acc ->
  cond do
    acc == nil -> x
    x > acc -> x
    x <= acc -> acc
  end
end)

# => 31

매핑도 할 수 있어요 (다만 그 뒤에 결과를 뒤집어야 해요):

Enum.map([1, 2, 3, 4, 5], fn x -> x + 10 end)
# => [11, 12, 13, 14, 15]

Enum.reduce([1, 2, 3, 4, 5], [], fn x, acc -> [x + 10 | acc] end)
# => [15, 14, 13, 12, 11]

맵 매핑하기

  • Map.new/2 사용:

    %{a: 1, b: 2}
    |> Map.new(fn {key, value} -> {key, value * 10} end)
    
  • Enum.into/3 사용:

    %{a: 1, b: 2}
    |> Enum.into(%{}, fn {key, value} -> {key, value * 10} end)
    
  • Enum.map/2 사용:

    %{a: 1, b: 2}
    |> Enum.map(fn {key, value} -> {key, value * 10} end)
    |> Enum.into(%{})
    
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

Enum 배우기

연습이 잠겨 있어요

Enum 개념을 연습하려면 연습 문제 10개를 더 잠금 해제해요