2017-01-20 21 views
2

我有一張如下在scala中給出的地圖。通過scala中的地圖的關鍵函數進行聚合/降低

Map("x"-> "abc", "y"->"adc","z"->"abc", "l"-> "ert","h"->"dfg", "p"-> "adc") 

我想要的輸出如下所示:

Map("abc"->["x","z"],"adc"->["y" , "p"], "ert"->"l", "dfg"->"h") 

所以,輸出具有該陣列的那些那些曾在inital地圖相同的值密鑰的值。我怎樣才能做到最佳?

+2

的[優雅的方式反轉Scala中的一個地圖]可能的複製(http://stackoverflow.com/questions/2338282/elegant-way-to-invert-a-map-in-scala) –

+1

'結果中的「l」和「h」可能應該是'[「l」]和'[「h」]',對吧?然後Brian從下面的回答正是你想要的。 – user152468

回答

3

A groupBy然後對其輸出的值進行某些操作。

scala> m.groupBy(x => x._2).mapValues(_.keys.toList) 
res10: scala.collection.immutable.Map[String,List[String]] 
    = Map(abc -> List(x, z), dfg -> List(h), ert -> List(l), adc -> List(y, p))