Подтвердить что ты не робот

Scala Преобразовать в карту

Как преобразовать Set ( "a", "b", "c" ) в карту ( "a" → 1, "b" → 2, "c" → 3)? Я думаю, что он должен работать с toMap.

4b9b3361

Ответ 1

zipWithIndex - это, вероятно, то, что вы ищете. Он возьмет вашу коллекцию писем и создаст новую коллекцию Tuples, сопоставив ее с позицией в коллекции. У вас есть дополнительное требование, хотя, похоже, ваши позиции начинаются с 1, а не с 0, поэтому вам нужно будет преобразовать те кортежи:

Set("a","b","c")
  .zipWithIndex    //(a,0), (b,1), (c,2)
  .map{case(v,i) => (v, i+1)}  //increment each of those indexes
  .toMap //toMap does work for a collection of Tuples

Одно дополнительное соображение - Наборы не сохраняют позицию. Подумайте о том, как использовать структуру, такую ​​как List, если вы хотите, чтобы указанное положение постоянно работало.

Ответ 2

Вот еще одно решение, которое использует Stream всех натуральных чисел, начиная с 1, чтобы закрепить на вашем Set:

scala> Set("a", "b", "c") zip Stream.from(1) toMap
Map((a,1), (b,2), (c,3))

Ответ 3

toMap работает, только если записи Set являются парами ключ/значение (например, Set(("a",1),("b",2),("c",3))).

Чтобы получить то, что вы хотите, используйте zipWithIndex:

Set("a","b","c") zipWithIndex
// Set[(String, Int)] = Set((a,0), (b,1), (c,2))

или (как в оригинальном вопросе):

Set("a","b","c") zip (1 to 3) toMap

Ответ 4

Это также сработает:

(('a' to 'c') zip (1 to 3)).toMap