Fusionner deux maps dans Scala puis additionner les valeurs avec la même clé
-
Fusion de deux maps dans Scala à l’aide de l’opérateur
++
- Fusionner des maps et additionner les valeurs avec la même clé
Nous verrons comment les Maps
sont fusionnées en utilisant ++
dans Scala, puis nous verrons différentes manières de fusionner et de sommer les valeurs avec la même clé avec la méthode modifiée ++
et merged
disponible avec HashMap.
Fusion de deux maps dans Scala à l’aide de l’opérateur ++
Syntaxe:
map1.++(map2)
Ici, map2 est fusionné avec map1, et la map
résultante est renvoyée en sortie. ++
fusionne les maps, mais élimine les doublons ; la dernière paire clé, valeur
est prise en compte chaque fois qu’un conflit survient entre les clés.
Exemple de code :
object Main {
def main(args: Array[String])
{
//let's assume a mapping from Student -> marks
val map1_english = Map("Tony" -> 50, "Ruby" -> 89)
val map2_maths = Map("Tony"->77,"Ruth" -> 100, "Ben" -> 78)
println("Map1 : " + map1_english)
println("Map2 : " + map2_maths)
// merging the map
val mergedMap = map1_english.++(map2_maths)
println("Class marks are : " + mergedMap)
}
}
Production :
Map1 : Map(Tony -> 50, Ruby -> 89)
Map2 : Map(Tony -> 77, Ruth -> 100, Ben -> 78)
Class marks are : Map(Tony -> 77, Ruby -> 89, Ruth -> 100, Ben -> 78)
On peut observer que la dernière paire clé, valeur
c’est-à-dire Tony,77
est considérée en sortie.
Fusionner des maps et additionner les valeurs avec la même clé
Méthode 1 :
Comme utiliser ++
fusionne les maps mais élimine le doublon, l’idée ici est d’abord de convertir les maps en une liste en utilisant toList
, puis de les fusionner afin que les doublons soient conservés, puis d’utiliser le groupBy
la fonction de la liste pour regrouper les valeurs en fonction des clés et additionner les valeurs
pour les mêmes clés.
Exemple de code :
object Main {
def main(args: Array[String])
{
val map1_english = Map("Tony" -> 50, "Ruby" -> 89)
val map2_maths = Map("Tony"->77,"Ruby" -> 100, "Ben" -> 78)
val mergedList = map1_english.toList ++ (map2_maths.toList)
println("Merged List : " + mergedList)
val mergedKeys = mergedList.groupBy(_._1).map{case (k,v) => k -> v.map(_._2).sum}
println("Merged Map with summed up values : " + mergedKeys)
}
}
Production :
Merged List : List((Tony,50), (Ruby,89), (Tony,77), (Ruby,100), (Ben,78))
Merged Map with summed up values : Map(Ruby -> 189, Ben -> 78, Tony -> 127)
Méthode 2 :
Utilisation de la méthode merged
disponible avec HashMap.
Exemple de code :
object Main {
def main(args: Array[String])
{
val map1_english = collection.immutable.HashMap("Tony" -> 50, "Ruby" -> 89)
val map2_maths = collection.immutable.HashMap("Tony"->77,"Ruby"-> 100, "Ben"->78)
val merged = map1_english.merged(map2_maths)({ case ((k,v1),(_,v2)) =>(k,v1+v2)})
println("Merged Map with summed up values : " + merged)
}
}
Production :
Merged Map with summed up values : Map(Ruby -> 189, Tony -> 127, Ben -> 78)