Как создать карту из двух списков?

#list #scala

#scala

Вопрос:

У меня есть два списка

 val a = List(1,2,3)
val b = List(5,6,7)
  

Я хотел бы создать карту, подобную:

 val h = Map(1->5, 2->6, 3->7) 
  

в основном перебираем оба списка и присваиваем пары ключ-значение.

Как правильно это сделать в Scala?

Ответ №1:

Вы можете zip объединить списки в список кортежей, а затем вызвать toMap :

 (a zip b) toMap
  

Обратите внимание, что если один список длиннее другого, он будет усечен.


Пример:

 val a = List(1, 2, 3)
val b = List(5, 6, 7)

scala> (a zip b) toMap
res2: scala.collection.immutable.Map[Int,Int] = Map(1 -> 5, 2 -> 6, 3 -> 7)
  

С усечением:

 val c = List("a", "b", "c", "d", "e")

scala> (a zip c) toMap
res3: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c)

(c zip a) toMap
res4: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3)
  

Комментарии:

1. Привет @Michael Zajac, последующий вопрос по этому поводу, я использую этот zip-метод, но когда я печатаю свою карту, пары ключ-значение расположены не в том порядке, в котором они были изначально. Я имею в виду, что я получаю подобную карту (b-> 2, c-> 3, a -> 1). Есть ли способ сохранить порядок элементов карты в качестве моего первого списка? Большое вам спасибо