Получить отклоненные / нефильтрованные элементы из Enum - PullRequest
0 голосов
/ 29 августа 2018

Имея, например, этот список

list = [1, 2, 3, 4, 4]

Я могу отфильтровать элементы, равные 4, вот так.

Enum.reject(list, fn item -> item == 4 end)

Есть ли способ получить отбракованные предметы? как [4, 4]

Что-то вроде:

rejected = Enum.get_rejected(list, fn item -> item == 4 end)
more_rejected = Enum.get_rejected(list, fn item -> item == 3 end)
remaining = list

Я могу добиться этого прямо сейчас, повторяя несколько раз, например:

rejected = Enum.filter(list, fn item -> item == 4 end)
more_rejected = Enum.filter(list, fn item -> item == 3 end)
remaining = Enum.reject(list, fn item -> item != 4 and item != 3 end)

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать Enum.split_with/2, чтобы получить набор отфильтрованных и отклоненных списков:

iex(1)> list = [1, 2, 3, 4, 4]
[1, 2, 3, 4, 4]
iex(2)> {accepted, rejected} = Enum.split_with(list, fn item -> item == 4 end)
{[4, 4], [1, 2, 3]}
iex(3)> {more_accepted, remaining} = Enum.split_with(rejected, fn item -> item == 3 end)
{[3], [1, 2]}
...