我对 Elixir 很陌生,只是想找到将两张 map 与同一个键组合在一起的最佳方法。更具体:
name_map = %{
105 => "Jim",
48 => "Maria",
62 => "Karen",
888 => "Foo"
}
job_map = %{
105 => "Social worker",
48 => "Programmer",
62 => "Teacher",
999 => "Bar"
}
我想得到
combined_map = %{
105 => %{"name" => "Jim", "job" => "Social worker"},
48 => %{"name" => "Maria", "job" => "Programmer"},
62 => %{"name" => "Karen", "job" => "Teacher"},
888 => %{job: nil, name: "Foo"},
999 => %{job: "Bar", name: nil}}
}
在此先感谢您的帮助!
最佳答案
一个简单的解决方案:从两个映射中获取所有键,迭代键,从映射中检索值并构造元组 {key, %{name: name, job: job}}
,然后将元组缩减为映射。
name_map = %{
105 => "Jim",
48 => "Maria",
62 => "Karen",
888 => "Foo"
}
job_map = %{
105 => "Social worker",
48 => "Programmer",
62 => "Teacher",
999 => "Bar"
}
combined_map = Map.keys(name_map) ++ Map.keys(job_map)
|> Stream.uniq
|> Stream.map(&{&1, %{name: name_map[&1], job: job_map[&1]}})
|> Enum.into(%{})
%{48 => %{job: "Programmer", name: "Maria"},
62 => %{job: "Teacher", name: "Karen"},
105 => %{job: "Social worker", name: "Jim"},
888 => %{job: nil, name: "Foo"},
999 => %{job: "Bar", name: nil}}
关于elixir - 在 Elixir 中组契约(Contract)一个键上的两个 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44318215/