mirror of
https://github.com/jbranchaud/til
synced 2026-01-02 22:58:01 +00:00
30 lines
803 B
Markdown
30 lines
803 B
Markdown
# Remove One List From Another
|
|
|
|
The `--/2` operator allows you to subtract two lists, that is, remove all
|
|
elements in the _right_ list from the _left_ list. Each occurrence of an
|
|
element is removed if there is a corresponding element. If there is no
|
|
corresponding element, it is ignored.
|
|
|
|
Here are some examples.
|
|
|
|
```elixir
|
|
> [1, 2, 3] -- [2, 4]
|
|
[1, 3]
|
|
> [:a, :b, :c, :a, :d, :a] -- [:a, :a]
|
|
[:b, :c, :d, :a]
|
|
```
|
|
|
|
This kind of list operation is not particularly efficient, so for large
|
|
lists it can be quite slow. The following example took several minutes to
|
|
run.
|
|
|
|
```elixir
|
|
> Enum.into(1..1000000, []) -- Enum.into(2..1000000, [])
|
|
[1]
|
|
```
|
|
|
|
To achieve a true set difference, you'll note that the docs for this
|
|
operator recommend checking out `MapSet.difference/2`.
|
|
|
|
See `h Kernel.--` for more details.
|