В Scala, там способ взять, преобразовывают два списка в Карту?

У меня есть два списки, a List[A] и a List[B]. То, что я хочу, является a Map[A,B] но я хочу семантику zip. Так начатый как так:

var tuplesOfAB = listOfA zip listOfB

Теперь я не уверен, как создать a Map от моего tuplesOfAB.

Как последующий вопрос, я также хочу инвертировать свою карту так, чтобы от a Map[A,B] Я могу создать a Map[B,A]. Кто-либо может поразить меня палкой подсказки?

27
задан oxbow_lakes 3 February 2010 в 09:03
поделиться

3 ответа

В 2.8 Это действительно просто, используя функциональность Canbuildfrom функциональности (, как описано Daniel ) и с использованием прорыва с типом Инструкция к компилятору относительно того, какой тип результата должен быть:

import scala.collection.breakOut
val m = (listA zip listB)(breakOut): Map[A,B]

следующее также будет работать:

val n: Map[A,B] = (listA zip listB)(breakOut)

и (как oastSun, ниже, указал), это было добавлено в библиотеку как TOMAP

val o = (listA zip listB).toMap

Что касается обратного изменения карты, вы можете сделать:

val r = m.map(_.swap)(breakOut): Map[B, A]
32
ответ дан 28 November 2019 в 04:56
поделиться

Теперь, когда у вас есть список кортежей, его легко превратить в карту, написав Map (tuplesOfAB: _ *) . Обозначение : _ * означает вызов перегрузки varargs с аргументами, взятыми из последовательности. Это кажется забавным синтаксисом, но помогает предположить, что varargs объявлены как Map [A, B] (пары: (A, B) *) и : _ * - это аннотация типа для преобразования в varargs из-за общей части * .

Чтобы перевернуть карту m , используйте Map (m.map (_. Swap): _ *) . В scala карта также представляет собой набор пар. Это преобразует эти пары, меняя местами элементы и передавая их конструктору карты.

15
ответ дан 28 November 2019 в 04:56
поделиться

Есть еще один способ сделать это, помимо уже показанных. Здесь:

Map() ++ tuplesOfAB
5
ответ дан 28 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: