2014-10-10 5 views
0

У меня есть SCALA карта myMap, и я хочу, чтобы создать список MyList пара следующим образом:Как создать список, применив операцию ко всем элементам карты Scala?

Для каждого (к, v) в MyMap, MyList должны иметь Кортеж (v.someMember, к), как элемент

результат использования map и for понимания является новой картой. Есть ли лучший способ сделать это, чем начать с пустым списком и добавить элементы, как я Переберите (ключ, значение) пар на карте

var myList = List.empty[(Double, String)] 
myMap foreach { case(k,v) => myList ::= (v.someMember, k) } 

ответ

3

Используйте toList и затем map.

Например:

scala> Map("a" -> 1, "b" -> 2).toList.map { case (k, v) => (k.size, v) } 
res12: List[(Int, Int)] = List((1,1), (1,2)) 

Или, если вы хотите быть больше памяти эффективной и не выделяют промежуточный список, вы можете создать список, а map та с breakOut

import scala.collection.breakOut 

scala> val l: List[(Int, Int)] = Map("a" -> 1, "b" -> 2).map({ case (k, v) => (k.size, v) })(breakOut) 
l: List[(Int, Int)] = List((1,1), (1,2)) 
+0

Спасибо! Именно то, что я искал – AnkurVj

0

Рассмотрим также это для синтаксиса понимания (здесь семантически эквивалентно map, как уже было предложено); например, для

val myMap = Map (1.1 -> "abc" , 2.2 -> "xyz") 

for ((k,v) <- myMap.toList) yield v(2) -> k 

После заявления вопроса,

for ((k,v) <- myMap.toList) yield v.someMember -> k 
Смежные вопросы