Elixir - 如何将关键字列表转换为字符串?

Arp*_*era 1 elixir phoenix-framework

我有一个关键字列表: [key1: "value", key2: "value2", key3: "value3"]

我想将其转换为字符串: "key1:value1&key2:value2&key3:value3"

我在考虑使用Enum.reduce,但该函数的参数是什么?

Dog*_*ert 5

由于你想在映射它们之后在值之间添加一个分隔符,我建议使用Enum.map_join/3:

iex(1)> list = [key1: "value", key2: "value2", key3: "value3"]
[key1: "value", key2: "value2", key3: "value3"]
iex(2)> list |> Enum.map_join("&", fn {k, v} -> "#{k}:#{v}" end)
"key1:value&key2:value2&key3:value3"
Run Code Online (Sandbox Code Playgroud)

这就是你可以这样做的方法Enum.reduce/3(&在开始时插入一个额外的插入使用String.trim_leading/1):

iex(3)> list |> Enum.reduce("", fn {k, v}, acc -> "#{acc}&#{k}:#{v}" end) |> String.trim_leading("&")
"key1:value&key2:value2&key3:value3"
Run Code Online (Sandbox Code Playgroud)

  • 使用@dogbert的解决方案以及我自己的解决方案,我在此GitHub gist上做了一些超级非正式的基准测试(https://gist.github.com/amorphid/9bd536cfe19d2a3230c61a349b615aab)。当使用300万个元素运行它时,我用太多的原子使BEAM崩溃了:) (2认同)