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 puede iterar, es decir, una colección. En Elixir, un enumerable es cualquier tipo de dato que implemente 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 solo valor. Para lograrlo, se usa una variable especial llamada el acumulador. El acumulador lleva el estado intermedio de la reducción entre iteraciones. Esto lo convierte en una de las funciones más poderosas para trabajar con enumerables. Muchas otras funciones especializadas podrían reemplazarse 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 (pero 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 maps

  • 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 ventana o pestaña nueva

Aprende Enum

La práctica está bloqueada

Desbloquea 10 ejercicios más para practicar Enum