Geo*_*... 0 dictionary list elixir
我正在尝试实现一个字典,但 Map.put 函数没有将新元素添加到地图中,而是给了我一个新地图,其中插入了最后一个 (key, value} 我也试过 Map.put_new 它没有用
def someFunction(array) do
dict = %{}
Enum.each(array, fn item ->
if (Map.has_key?(dict, item)) do
dict = %{dict | item => (dict[item] + 1)}
else
dict = Map.put(dict , item, 1)
end
end)
end
Run Code Online (Sandbox Code Playgroud)
长生不老药做变量范围的方式,你不能dict从你的Enum.each/2. 相反,您需要做的是dict在枚举array.
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)
Run Code Online (Sandbox Code Playgroud)
您还可以使用Map.update/4来改进您的减速机。
dict = Enum.reduce(array, %{}, fn item, dict -> Map.update(dict, item, 1, &(&1 + 1)) end)
Run Code Online (Sandbox Code Playgroud)
但实际上从 Elixir 1.10 开始就有一个内置函数Enum.frequencies/1。
dict = Enum.frequencies(array)
Run Code Online (Sandbox Code Playgroud)