Sie können die folgende einzeilige versuchen:
%Vor% Dabei sind l1
und l2
die Listen der Tupel, die Sie zusammenführen möchten.
Nun, der Zusammenbruch:
(l1 ++ l2)
Sie verketten nur beide Listen .groupBy( _._1)
Sie gruppieren alle Tupel nach ihrem ersten Element. Sie erhalten eine Karte mit
das erste Element als Schlüssel und Listen von Tupeln, die mit diesem Element als Werte beginnen. .map( kv => (kv._1, kv._2.map( _._2).sum ) )
Sie erstellen eine neue Map mit ähnlichen Schlüsseln, aber die Werte sind die Summe aller zweiten Elemente. .toList
Sie konvertieren das Ergebnis zurück in eine Liste. Alternativ können Sie den Mustervergleich verwenden, um auf die Tupelelemente zuzugreifen.
%Vor% Alternativ können Sie auch mapValues
verwenden, um den Code zu verkürzen.
mapValues
ermöglicht Ihnen, wie Sie wahrscheinlich erraten können, nur den Wert für jedes Paar (Schlüssel, Wert) in der Map, die von groupBy
erstellt wurde, neu zuzuordnen.
In diesem Fall reduziert die an mapValues
übergebene Funktion jedes (Char, Int) -Tupel auf genau den Int-Wert und summiert dann die resultierende Liste der Intents.
Wenn die Reihenfolge der Ausgabeliste Ihrem Beispiel folgen muss, fügen Sie einfach sorted
hinzu, das auf einer impliziten Instanz von Ordering [(Char, Int)] basiert.