Эликсир: Как инвертировать карту (поменять местами ключи и значения)? - PullRequest
2 голосов
/ 03 октября 2019

У меня есть карта, подобная этой:

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 03 октября 2019

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

  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}
    
4 голосов
/ 03 октября 2019

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

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