灵药:如何反转地图(交换键和值)?



我有这样一张地图:

%{
"US" => "United States",
"CA" => "Canada",
"NL" => "The Netherlands"
}

我想将键与值交换,从而生成如下映射:

%{
"United States" => "US",
"Canada" => "CA",
"The Netherlands" => "NL"
}

像这样"反转"或"反转"地图的最佳方法是什么?我在任何地方都没有看到它的专用功能。

一种简单的方法是使用Map.new。它需要一个函数,您可以在其中为每对指定新的键和值:

Map.new(map, fn {key, val} -> {val, key} end)

更多方法:

  1. Enum.into/3

    Enum.into(map, %{}, &{elem(&1, 1), elem(&1, 0)})
    
  2. Kernel.SpecialForms.for/1理解:

    for {k, v} <- map, into: %{}, do: {v, k}
    

最新更新