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

问题描述:

我有一个关键字列表:[key1: "value", key2: "value2", key3: "value3"]Elixir - 如何将关键字列表转换为字符串?

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

我想用Enum.reduce,但会是怎样的函数的自变量?

既然你想它们映射后值之间添加一个分隔符,我建议使用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" 

这是你如何可以用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" 
+1

使用@ dogbert的解决方案,并和一些我自己的,我做了一些超级非正式标杆[在此GitHub的要点]( https://gist.github.com/amorphid/9bd536cfe19d2a3230c61a349b615aab)。当运行300万个元素时,我撞击了太多原子的BEAM :) – amorphid

+0

今天我了解了Enum.map_join/3 :) –