List 如何使用映射实现词典
我正在尝试实现一个字典,但是Map.put函数没有将新元素添加到映射中,而是为我提供了一个插入了最后一个(key,value}的新映射。我也尝试了Map.put_new,但它不起作用List 如何使用映射实现词典,list,dictionary,elixir,List,Dictionary,Elixir,我正在尝试实现一个字典,但是Map.put函数没有将新元素添加到映射中,而是为我提供了一个插入了最后一个(key,value}的新映射。我也尝试了Map.put_new,但它不起作用 def someFunction(数组)do dict=%{} 枚举每个(数组,fn项-> 如果(地图上有_键?(命令,项目))做什么 dict=%{dict|item=>(dict[item]+1)} 其他的 dict=Map.put(dict,item,1) 结束 (完) 结束 就像elixir处理变量作用域一
def someFunction(数组)do
dict=%{}
枚举每个(数组,fn项->
如果(地图上有_键?(命令,项目))做什么
dict=%{dict|item=>(dict[item]+1)}
其他的
dict=Map.put(dict,item,1)
结束
(完)
结束
就像elixir处理变量作用域一样,您不能从枚举内部设置dict
。每个/2
。相反,您需要做的是在枚举数组时将dict
作为累加器传递
dict =
Enum.reduce(array, %{}, fn item, dict ->
if (Map.has_key?(dict, item)) do
%{dict | item => (dict[item] + 1)}
else
Map.put(dict , item, 1)
end
end)
您还可以使用Map.update/4
改进减速器
dict = Enum.reduce(array, %{}, fn item, dict -> Map.update(dict, item, 1, &(&1 + 1)) end)
但是自从Elixir1.10以来,实际上有一个内置函数
Enum.frequencies/1
,很好。也值得检查。
dict = Enum.frequencies(array)