У меня есть такая карта:

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

Я хотел бы поменять местами ключи со значениями, в результате чего получилась карта, подобная этой:

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

Какой лучший способ сделать «инвертировать» или «перевернуть» такую карту? Я не вижу выделенной функции для этого нигде.

2
Topher Hunt 3 Окт 2019 в 12:30

2 ответа

Лучший ответ

Один из простых способов - использовать Map.new. Требуется функция, в которой вы можете указать новый ключ и значение для каждой пары:

Map.new(map, fn {key, val} -> {val, key} end)
5
Topher Hunt 3 Окт 2019 в 09:30

Больше подходов:

  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}
    
6
gmile 3 Окт 2019 в 11:14