Enum in Elixir

Contents
Map and filter
Reduce
Sort and uniq
Find and reject

Map and filter

Enum is the toolkit for collections, and map plus filter are its daily pair. Map transforms every element, while filter keeps only the elements that pass a test.

[1, 2, 3, 4] |> Enum.map(&(&1 * 2)) |> Enum.filter(&(&1 > 4))

Doubling gives 2, 4, 6, 8, and keeping values above 4 leaves 6 and 8. Both functions return fresh lists and never touch the original.

Reduce

Reduce folds a whole collection into one value by carrying an accumulator through each element. You name the starting value, and the tiny function says how each element joins it.

Enum.reduce([1, 2, 3, 4], 0, &(&1 + &2))

Starting from 0 and adding each element gives 10, the total of the list. Sums, products, and grouped maps all grow from this one folding pattern.

Sort and uniq

Sort arranges elements and uniq drops neighbours that repeat, so the pair turns messy input into a clean ordered set. Sort first, because uniq only removes duplicates that sit side by side.

[3, 1, 2, 1, 3] |> Enum.sort() |> Enum.uniq()

Sorting lines the values up as 1, 1, 2, 3, 3, and uniq trims the doubles to 1, 2, 3. Pass a custom compare function to sort when plain order is not what you need.

Find and reject

Find returns the first element that passes a test, while reject returns all elements that fail it. They answer opposite questions with the same tiny predicate shape.

Enum.find([1, 2, 3, 4], &(&1 > 2)) Enum.reject([1, 2, 3, 4], &(&1 > 2))

Find stops at 3, the first value above 2, and reject keeps 1 and 2 while dropping the rest. When nothing matches, find calmly returns nil instead of raising.

Next: Stream in Elixir

Article author: Arthur Isaev

Related articles
Elixir
Elixir course: zero to hero in 50 lessons
What is Elixir and where it runs
Install Elixir
iex: the interactive shell
Your first script
Variables
Numbers
Strings
Atoms
Truthiness: only false and nil
Conditions
Recursion replaces loops
Lists
Tuples
Maps
Keyword lists
Functions
Defaults and clauses
Pattern matching
case
with chains
Modules in Elixir
import, alias, require, use in Elixir
Structs in Elixir
Protocols in Elixir
Behaviours in Elixir
The pipe operator in Elixir
Enum in Elixir
Stream in Elixir
Comprehensions in Elixir
Advanced strings in Elixir
Sigils
Binaries and charlists
Exceptions
ok and error tuples
Files and IO
Processes
GenServer
Supervisors
Tasks and Agents
OTP applications
Mix projects
Dependencies
Testing with ExUnit
Doctests
Debugging
Configs
Releases
Capstone: todo CLI
Capstone: HTTP server
Hero roadmap: the whole course on one page
Install Elixir on Windows 11
Install Elixir on Ubuntu
Install Elixir on Rocky Linux
Install Elixir on macOS
Install Elixir on FreeBSD
Elixir in Docker

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: