【发布时间】:2017-08-20 16:59:41
【问题描述】:
给定:
iex(9)> list_of_maps = [%{"a" => 1, "b" => 2, "c" => 3},%{"a" => 66, "b" => 1, "c" => 9},%{"a" => 66, "b" => 20, "c" => 8}]
我能做到:
iex(10)> Enum.filter(list_of_maps, &(&1["a"] == 1))
Enum.filter(list_of_maps, &(&1["a"] == 1))
[%{"a" => 1, "b" => 2, "c" => 3}]
然而现在我害怕用每种语言编写的部分 - 获取此列表的第一个值以提取单个项目。
elixir 中是否有一些标准功能可以过滤列表,如果在应用过滤器后只有一个项目,则返回单个项目,或者如果在应用过滤器后返回多个项目,则返回项目列表?喜欢:
iex(11)> Enum.filterr(list_of_maps, &(&1["a"] == 1))
Enum.filter(list_of_maps, &(&1["a"] == 1))
%{"a" => 1, "b" => 2, "c" => 3}
iex(12)> Enum.filterr(list_of_maps, &(&1["a"] == 66))
Enum.filter(list_of_maps, &(&1["a"] == 66))
[%{"a" => 66, "b" => 1, "c" => 9},%{"a" => 66, "b" => 20, "c" => 8}]]
【问题讨论】:
-
仅供参考,如果您只想要第一个,这里有
Enum.find/2。 -
我很好奇你为什么需要这个。这不需要添加一个特殊情况来处理映射列表,并且只映射到您从
filterr/2获取结果后计划调用的任何函数? -
@Dogbert 不确定我是否正确理解了这个问题,(将“地图列表和仅地图”读取为“地图和只是的列表maps' - 但是在选择单个项目的情况下,似乎不需要特殊情况 - 这是预期的。但是我现在可以看到,如果需要单个项目,使用 @ 987654326@ 显示更清晰的预期返回单个项目。
标签: list filter elixir enumerable