2016-10-09 17 views
0

に[INT、のInt]をマップするには、次変換一覧[地図[文字列、地図[文字列、int]は]]を考えるとScalaの

Map(1->21,2->22,3->23,4->24) 

val t: List[Map[String, Map[String, Int]]] = List(
    Map("a" -> Map("m" -> 1, "l" -> 21)), 
    Map("a" -> Map("m" -> 2, "l" -> 22)), 
    Map("a" -> Map("m" -> 3, "l" -> 23)), 
    Map("a" -> Map("m" -> 4, "l" -> 24)) 
) 

が、私は結果が欲しいです

val tt = (for { 
    (k,v) <- t 
    newKey = v("m") 
    newVal = v("l") 
} yield Map(newKey -> newVal)).flatten.toMap 

しかし、これは、私はなぜ理解しない傾けるので、いくつかの基本的な理解が欠けそうイムをチェック入力していない:私はこれまで持っていることはありますか?

私の質問は以下のとおりです。

  1. なぜ私のコードが故障しているのですか?
  2. 私が望む変換を行うのに最も慣れ親しんだ方法は何でしょうか?

答えて

2

List[Map[...]]で、Map[...]ではなく、最初に解凍します。

val tt = (for { 
    map <- t 
    (k, v) <- map 
} ...) 
0
t 
    .iterator 
    .flatMap(_.values) 
    .map { v => v("m") -> v("l") } 
    .toMap 
関連する問題