elixir - 在 Elixir 中组契约(Contract)一个键上的两个 map

标签 elixir

我对 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/

相关文章:

elixir - 为什么会出错——未定义的函数defstruct

elixir - Elixir OTP Supervisor 检测到崩溃的进程时记录错误

network-programming - 将 SO_REUSEPORT 与 Phoenix 一起使用

node.js - NodeJS 加密 RSA,与 Elixir/Erlang PublicKey 不兼容?

datetime - 在 Elixir 中是否有类似 get DaysInMonth 的东西?

elixir - 使 Phoenix Controller 输出漂亮的 JSON

erlang - 尝试指定 :env in Elixir Port. 打开时出现参数错误

elixir - 如何使用 Phoenix Presence 跟踪主题/子主题的存在?

elixir - 对 iex shell 中的输入进行着色

elixir - 基于负载的Phoenix路由