2017-11-14 16 views
0

に基づいてマップを軽減するには、次の地図データスカラ - 変更されたキー

val testMap: Map[String, Int] = Map("AAA_abc" -> 1, 
            "AAA_anghesh" -> 2, 
            "BBB_wfejw" -> 3, 
            "BBB_qgqwe" -> 4, 
            "C_fkee" -> 5) 

は、今私はkey.split("_").headでマップを軽減し、同等になったキーのすべての値を追加したい考えてみましょう。 Scalaでそうする正しい方法だろう何

Map(AAA -> 3, BBB -> 7, C -> 5) 

:だから、この例ではMapは、になるはずですか? groupByreduceLeftで構造を試しましたが、解決策が見つかりませんでした。

+0

uはuは試してみましたどのようなコードを示すことができますか? –

答えて

1

ここでそれを行う方法です:

testMap.groupBy(_._1.split("_").head).mapValues(_.values.sum) 
+0

ありがとうございます!それはまさに私が必要とするものです。 –

+0

代わりに 'mapValues(_。values.sum)'を使うことができます – Chirlo

+0

ありがとう、ありがとう。 –

1

1つのパスの変動:

testMap.foldLeft(Map[String,Int]())((map, kv) => { 
    val key = kv._1.split("_").head 
    val previous = map.getOrElse(key,0) 
    map.updated(key, previous + kv._2) }) 
関連する問題