Skip to content

Commit 0eccb76

Browse files
committed
Implement default split/2 for Dict.Behaviour
1 parent dad0f3f commit 0eccb76

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

lib/elixir/lib/dict/behaviour.ex

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ defmodule Dict.Behaviour do
4141
* `pop/2`
4242
* `pop/3`
4343
* `put_new/3`
44+
* `split/2`
4445
* `take/2`
4546
* `to_list/1`
4647
* `values/1`
@@ -177,9 +178,22 @@ defmodule Dict.Behaviour do
177178
end
178179
end
179180

181+
def split(dict, keys) do
182+
Enum.reduce keys, { new, dict }, fn key, { inc, exc } = acc ->
183+
case fetch(exc, key) do
184+
{ :ok, value } ->
185+
{ put(inc, key, value), delete(exc, key) }
186+
187+
:error ->
188+
acc
189+
end
190+
end
191+
end
192+
180193
defoverridable merge: 2, merge: 3, equal?: 2, to_list: 1, keys: 1,
181194
values: 1, take: 2, drop: 2, get: 2, get: 3, fetch!: 2,
182-
has_key?: 2, put_new: 3, pop: 2, pop: 3, update: 4, update!: 3
195+
has_key?: 2, put_new: 3, pop: 2, pop: 3, update: 4, update!: 3,
196+
split: 2
183197
end
184198
end
185199
end

0 commit comments

Comments
 (0)