En

Enum en Elixir

98 ejercicios

Acerca de Enum

Enum es un módulo muy útil que proporciona un conjunto de algoritmos para trabajar con enumerables. Ofrece:

¡Y mucho más! Consulta la documentación del módulo Enum para ver la lista completa.

Enumerable

En general, un enumerable es cualquier dato sobre el que se pueda iterar, es decir, una colección. En Elixir, un enumerable es cualquier tipo de dato que implementa el protocolo Enumerable. Estos son:

No te preocupes si todavía no los conoces todos.

Cualquiera puede implementar el protocolo Enumerable para su propia estructura de datos personalizada.

Reduce

Enum.reduce/2 te permite reducir todo el enumerable a un único valor. Para lograrlo, se utiliza una variable especial llamada acumulador. El acumulador lleva el estado intermedio de la reducción entre iteraciones. Esto lo convierte en una de las funciones más potentes para trabajar con enumerables. Muchas otras funciones especializadas podrían sustituirse por la más general reduce. Por ejemplo...

Encontrar el valor máximo:

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

E incluso el mapeo (aunque requiere invertir el resultado después):

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]

Mapear mapas

  • Con Map.new/2:

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

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

    %{a: 1, b: 2}
    |> Enum.map(fn {key, value} -> {key, value * 10} end)
    |> Enum.into(%{})
    
Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Enum

La práctica está bloqueada

Desbloquea 10 ejercicios más para practicar Enum