在Elixir中,可以使用Enum.group_by/3函数按照多个值的映射将元素分组。
Enum.group_by/3函数的语法如下:
Enum.group_by(collection, key_fun, value_fun)
其中,collection是要进行分组的集合,key_fun是一个函数,用于从集合中的元素中提取出用于分组的键,value_fun是一个函数,用于从集合中的元素中提取出用于分组的值。
该函数会返回一个以键为索引的Map,其中每个键对应一个列表,列表中包含了所有具有相同键的元素。
下面是一个示例:
data = [
%{name: "Alice", age: 25, city: "New York"},
%{name: "Bob", age: 30, city: "London"},
%{name: "Charlie", age: 25, city: "New York"},
%{name: "Dave", age: 35, city: "London"}
]
result = Enum.group_by(data, fn %{age: age, city: city} -> {age, city} end, fn %{name: name} -> name end)
IO.inspect(result)
输出结果为:
%{
{25, "New York"} => ["Alice", "Charlie"],
{30, "London"} => ["Bob"],
{35, "London"} => ["Dave"]
}
在这个例子中,我们使用了一个匿名函数作为key_fun,从每个元素中提取出了age和city作为键。然后,我们使用另一个匿名函数作为value_fun,从每个元素中提取出了name作为值。最后,我们得到了一个以年龄和城市为键的Map,每个键对应一个包含了具有相同年龄和城市的人名的列表。
对于Elixir中的多个值映射分组,可以使用Enum.group_by/3函数来实现。
领取专属 10元无门槛券
手把手带您无忧上云