【发布时间】:2019-12-14 05:36:51
【问题描述】:
例如,假设我有一个可枚举的 collection 对 {first, second}。使用
Enum.group_by(collection, fn {first, second} -> first end)
将产生一个Map,其密钥由传递的匿名函数确定。它的值是对的集合。
但是,我希望它的值包含该对的 second 元素。
一般来说,给定一个可枚举,我想分组提供一个键提取器和一个值映射器,这样我就可以确定将什么放入结果 Map 的值中。即,我想要类似的东西
map_group_by(
collection,
fn {_first, second} -> second end,
fn {first, _second} -> first end
)
collection 的值在分组之前被映射,但键映射器仍对原始元素进行操作。
标准库中有这样的功能吗?如果没有,实现这一目标最惯用的方法是什么?
我知道我可以做类似的事情
Enum.reduce(
collection,
%{},
fn({key, value}, acc) -> Dict.update(acc, key, [value], &([value | &1])) end
)
但这看起来很笨拙,并且会先发制人地创建[value] 列表(这是真的吗?)。有没有更好的既简洁又高效的方法?
【问题讨论】:
标签: elixir