2015-02-17 2 views
2

У меня есть вложенная Карта, как это:Scala расплющить вложенную карта

Map(1 -> Map(2 -> 3.0, 4 -> 5.0), 6 -> Map(7 -> 8.0)) 

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

Seq((1,2),(1,4),(6,7)) 

Какой элегантный способ сделать это?

ответ

4

С для-понимания:

val m = Map(1 -> Map(2 -> 3.0, 4 -> 5.0), 6 -> Map(7 -> 8.0)) 

scala> for((k1, v1) <- m.toSeq; k2 <- v1.keys) yield (k1, k2) 
res4: Seq[(Int, Int)] = ArrayBuffer((1,2), (1,4), (6,7)) 
4
val m = Map(1 -> Map(2 -> 3.0, 4 -> 5.0), 6 -> Map(7 -> 8.0)) 
m.toSeq.flatMap({case (k, v) => v.keys.map((k,_))})