Az Enum egy nagyon hasznos modul, amely algoritmusok sorát kínálja az enumerable-ökkel való munkához. Többek között:
sort/2, sort_by/2),filter/2),group_by/3),count/2)find/3),min/3, max/3),reduce/3, reduce_while/3),És még rengeteg mást! A teljes listát az Enum modul dokumentációjában találod.
Általánosságban egy enumerable minden olyan adat, amelyen végig lehet iterálni, azaz egy gyűjtemény. Elixirben enumerable minden olyan adattípus, amely megvalósítja az Enumerable protokollt. Ezek a következők:
Ne aggódj, ha még nem ismered mindet.
Bárki megvalósíthatja az Enumerable protokollt a saját egyedi adatszerkezetéhez.
Az Enum.reduce/2 segítségével a teljes enumerable-t egyetlen értékké redukálhatod. Ehhez egy speciális, akkumulátornak nevezett változóra van szükség. Az akkumulátor az iterációk között hordozza a redukálás köztes állapotát. Emiatt ez az egyik legerősebb függvény, amikor enumerable-ökkel dolgozol. Sok más speciális függvény helyettesíthető az általánosabb reduce-dzsel. Például...
A maximális érték megkeresése:
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
Sőt, még a leképezés is (de ehhez utána meg kell fordítani az eredményt):
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]
A Map.new/2 függvénnyel:
%{a: 1, b: 2}
|> Map.new(fn {key, value} -> {key, value * 10} end)
Az Enum.into/3 függvénnyel:
%{a: 1, b: 2}
|> Enum.into(%{}, fn {key, value} -> {key, value * 10} end)
Az Enum.map/2 függvénnyel:
%{a: 1, b: 2}
|> Enum.map(fn {key, value} -> {key, value * 10} end)
|> Enum.into(%{})