如何在Elixir映射中提取值
假设我有这个如何在Elixir映射中提取值,elixir,Elixir,假设我有这个 %{ “联系人全名”=>[“简”、“乔”、“工作”], “联系人手机号码”=>[“1234”、“5678”、“9012”], “联系人关系”=>[“兄弟姐妹”、“员工”、“员工”] } 我如何遍历该地图,获得 “简,1234,兄弟姐妹”,“琼斯,5678”,“东西”,等等 试用 Enum.each(联系人,fn{k,v}-> IO.puts(“{k}-->{v}”) (完) 但这产生了 联系人全名-->JaneJoeJob 联系人手机号码-->123456789012 联系人关
%{
“联系人全名”=>[“简”、“乔”、“工作”],
“联系人手机号码”=>[“1234”、“5678”、“9012”],
“联系人关系”=>[“兄弟姐妹”、“员工”、“员工”]
}
我如何遍历该地图,获得
“简,1234,兄弟姐妹”
,“琼斯,5678”,“东西”
,等等
试用
Enum.each(联系人,fn{k,v}->
IO.puts(“{k}-->{v}”)
(完)
但这产生了
联系人全名-->JaneJoeJob
联系人手机号码-->123456789012
联系人关系-->兄弟姐妹关系
您可以使用提取地图值,然后使用以下内容压缩列表值:
联系人详细信息=%{
“联系人全名”=>[“简”、“乔”、“工作”],
“联系人手机号码”=>[“1234”、“5678”、“9012”],
“联系人关系”=>[“兄弟姐妹”、“员工”、“员工”]
}
联系|u details |>Map.values()|>Enum.zip()
这将产生:
[
{“简”、“1234”、“兄弟姐妹”},
{“乔”,“5678”,“东西”},
{“工作”、“9012”、“东西”}
]
但是,请注意,这将返回一个元组列表。您可以使用以下附加步骤将元组转换为列表,以映射和转换元组:
contact\u详细信息
|>Map.values()
|>Enum.zip()
|>枚举映射(&Tuple.to_list/1)
这将产生:
[
[“简”、“1234”、“兄弟姐妹”],
[“乔”,“5678”,“东西”],
[“工作”、“9012”、“东西”]
]
希望这有帮助:)关于Elixir中
Enum.zip/1
的脚注:如果正在压缩的子列表长度不同,它将在到达最短列表末尾时停止。这与某些语言(例如Python)中的实现一致,但与其他语言(例如Ruby和一些JS库)中的实现不一致。