Elixir将字符串转换为地图代码不起作用

时间:2018-09-30 13:00:28

标签: elixir

好的开发人员,我在解决如何使功能正常工作时遇到问题。

测试用例

  test "count one of each" do
    expected = %{"one" => 1, "of" => 1, "each" => 1}
    assert Words.count("one of each") == expected
  end

这是我到目前为止的想法。

@spec count(String.t()) :: map
  def count(sentence) do
    sentence
    |> String.split
    |> Enum.map([sentence], &(%{sentence => 1 , value =>&1}))
  end
end

代码本身不起作用,有人可以根据我提供的测试来解释如何实现以下功能吗?

非常感谢。

2 个答案:

答案 0 :(得分:4)

从您的代码看来,您似乎还不了解pipes |>Enum函数的工作方式。您可能会更详细地阅读文档。

这应该做您想要的:

"one of each"
|> String.split()
|> Enum.group_by(fn x -> x end)
|> Enum.map(fn {k, v} -> {k, length(v)} end) 
|> Enum.into(%{})

说明:

  1. 将字符串拆分为列表。
  2. 将列表分组到地图中。键是单词,值是包含每次出现的列表。
  3. 将每个列表转换为其长度计数
  4. 将结果作为地图返回

答案 1 :(得分:2)

使用or ''

Enum.reduce