gpt4 book ai didi

elixir - 计算每个字符出现的次数(Elixir)?

转载 作者:行者123 更新时间:2023-12-02 00:58:36 25 4
gpt4 key购买 nike

在 JS 中,我可以做这样的事情:

function countIt(str){
let obj = {};
for(let i = 0; i < str.length; i++){
if(!obj[str[i]]){
obj[str[i]] = 1;
} else {
obj[str[i]]++;
}
}
return obj;
}

console.log(countIt("hello"));
//returns {
e: 1,
h: 1,
l: 2,
o: 1
}

考虑到 Elixir 的不变性,用 Map 计算每个字符出现次数的最佳方法是什么?

最佳答案

What is the general strategy for functional languages to solve this type of problem?

<强> Enum.reduce/3

"Hello World"
|> String.graphemes()
|> Enum.reduce(%{}, fn char, acc ->
Map.put(acc, char, (acc[char] || 0) + 1)
end)
#⇒ %{" " => 1, "H" => 1, "W" => 1, "d" => 1,
# "e" => 1, "l" => 3, "o" => 2, "r" => 1}
<小时/>

或(归功于@Dogbert)使用 Map.update/4 :

"Hello World"
|> String.graphemes()
|> Enum.reduce(%{}, fn char, acc ->
Map.update(acc, char, 1, &(&1 + 1))
end)
<小时/>

或者,也许更惯用,基于模式匹配 reducer 参数来确定我们是否应该添加或启动计数器:

"Hello World"
|> String.graphemes()
|> Enum.reduce(%{}, fn char, acc ->
case acc do
%{^char => count} -> %{acc | char => count + 1}
_ -> Map.put(acc, char, 1)
end
end)

关于elixir - 计算每个字符出现的次数(Elixir)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com