【问题标题】:Obtain rejected/unfiltered elements from Enum从 Enum 中获取被拒绝/未过滤的元素
【发布时间】:2018-08-30 00:45:18
【问题描述】:

例如这个列表

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)

【问题讨论】:

标签: elixir


【解决方案1】:

您可以使用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]}

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2012-03-06
    • 2021-12-09
    • 2011-09-03
    相关资源
    最近更新 更多