繁体   English   中英

Map 的字符串列表

[英]List of String to Map

嗨,我想转换我从 .txt 文件中拆分出来的这组列表

["a: 1", "b: 2", "c: 3"]

%{"a" => "1", "b" => "2", "c" => "3"}

非常感谢你。

for item <- ["a: 1", "b: 2", "c: 3"], into: %{} do
  [k, v] = String.split(item, ": ")
  {k, v}
end
# %{"a" => "1"}, %{"b" => "2"}, %{"c" => "3"}

最快的方法是使用通用reduce/2

list = ["a: 1", "b: 2", "c: 3"]
Enum.reduce(list, %{}, fn <<a::binary-size(1)>> <> ": " <> <<b::binary-size(1)>>, acc -> Map.put(acc, a, b) end)

或者另一种方法是使用into/2

Enum.into(list, %{}, fn <<a::binary-size(1)>> <> ": " <> <<b::binary-size(1)>> -> {a, b} end)

只是出于好奇:

list = ["a: 1", "b: 2", "c: 3"]

<<?%, ?{, Enum.join(list, ",") :: binary, ?}>>
|> Code.eval_string()
|> elem(0)
#⇒ %{a: 1, b: 2, c: 3}

请注意,当输入对于同一个键有多个值时,转换为 map 注定要失败:

list = ["a: 1", "a: 2", "a: 3"]

<<?%, ?{, Enum.join(list, ",") :: binary, ?}>>
|> Code.eval_string()
|> elem(0)
#⇒ %{a: 3}

这就是为什么最好将输入转换为Keyword

一般来说,应该首先修改产生这种奇怪输入的代码以返回Keyword

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM