从Elixir v1.2开始,不建议使用Dict模块。我们现在是1.4,它会发出警告:



Dict.merge以前是这样工作的:

iex(1)> animals_keyword_list = [cats: 2, dogs: 1]
[cats: 2, dogs: 1]
iex(2)> animals_map = %{cats: 3, rabbits: 1}
%{cats: 3, rabbits: 1}
iex(3)> Dict.merge(animals_map, animals_keyword_list)
%{cats: 2, dogs: 1, rabbits: 1}

处理简单的关键字列表->进行 map 合并的最佳方法是什么?

最佳答案

MapKeyword都实现EnumerableCollectable协议(protocol),因此我们可以使用Enum.into/2:

iex(4)> animals_keyword_list |> Enum.into(animals_map)
%{cats: 2, dogs: 1, rabbits: 1}

请注意,此解决方案要求您高兴的是,如果关键字列表中有重复的键,则声明的最后一个将覆盖所有先前的键,因为Maps不能有重复的键。相反,您可以反向查看并将Map合并到Keyword List中,它可以支持重复的键,您可以看到以下内容:
iex(5)> animals_map |> Enum.into(animals_keyword_list)
[cats: 2, dogs: 1, cats: 3, rabbits: 1]

关于elixir - 不推荐使用Dict.merge,将关键字列表与 map 合并的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41650632/

10-12 17:30