2017-01-12 6 views
1

は、私はどのように私はキーが同じ値を持つxからのキーのListのある、例えば、どのように私はスカラマップ:同じ値のキーを結合しますか?

def someFunction(m: Map[Int, List[String]]): Map[List[Int], List[String]] = 
    // stuff that would turn x into 
    // Map(List(1, 3) -> List("a", "b"), List(2, 4) -> List("a"), List(5) -> List("c")) 
を実装することができ、この新しい Mapから作成することになり Map

よう
val x = Map(1 -> List("a", "b"), 2 -> List("a"), 
      3 -> List("a", "b"), 4 -> List("a"), 
      5 -> List("c")) 

を持っていると仮定します

答えて

3

あなたがリストに地図を変換し、各タプルの最初の要素集約するgroupByを使用することができます。

x.toList.groupBy(_._2).mapValues(_.map(_._1)).map{ case (x, y) => (y, x) } 

// res37: scala.collection.immutable.Map[List[Int],List[String]] = 
//  Map(List(2, 4) -> List(a), List(1, 3) -> List(a, b), List(5) -> List(c)) 

それとも@Dylanは、コメントなどを、タプル要素を切り替えること_.swapを使用します。

x.toList.groupBy(_._2).mapValues(_.map(_._1)).map(_.swap) 
+3

あなたはかなり正確に同じ溶液で数秒で私を破ったので、私はあなたに1を与えると、あなたが最終 'map'呼び出しで' _.swap'を使用できることを追加します。 – Dylan

+0

@Dylan Ah、前に '_.swap'メソッドを知らなかった。ありがとうございました! – Psidom

+0

素晴らしい、ありがとう! – user4601931

関連する問題