【发布时间】:2020-08-06 17:01:41
【问题描述】:
解决 Elixir 中的练习字数问题。目标是返回一个包含句子中每个单词的字数的映射。即如果字符串“一条鱼两条鱼红鱼蓝鱼”是输入输出应该是%{ "one" => 1 , "fish" => 4 , "two" => 1 , "red" => 1 , "blue" => 1 }
据我所知:
iex(14)> sentence = "one fish two fish red fish blue fish"
"one fish two fish red fish blue fish"
iex(15)> String.split(sentence)
["one", "fish", "two", "fish", "red", "fish", "blue", "fish"]
iex(16)> String.split(sentence) |> Enum.group_by(fn(x) -> x end)
%{"blue" => ["blue"], "fish" => ["fish", "fish", "fish", "fish"],
"one" => ["one"], "red" => ["red"], "two" => ["two"]}
如何迭代此映射并在值上运行 Enum.count?我试过Enum.map(fn {k, v} -> {k, Enum.count(v)} end),但它返回一个元组列表[{"blue", 1}, {"fish", 4}, {"one", 1}, {"red", 1}, {"two", 1}]。我需要将元组转换为映射还是有更好的方法?如果我需要将元组转换为地图类型,我该怎么做?
我是 Elixir 和 Erlang 的新手,所以如果有人能告诉我为什么当你将映射传递给 Enum.map 函数时,你会得到一个元组列表而不是一个有用的映射。
【问题讨论】:
标签: elixir