Convertir Liste de tuple à la carte (et de traiter avec le double de la clé ?)
Je pensais à une belle façon de convertir une Liste de tuple avec le double de la clé [("a","b"),("c","d"),("a","f")]
en map ("a" -> ["b", "f"], "c" -> ["d"])
. Normalement (en python), j'aimerais créer une carte vide et en boucle sur la liste et cochez pour dupliquer une clé. Mais je suis à la recherche de quelque chose de plus scala-ish et solution intelligente ici.
btw, type réel de la valeur-clé que j'utilise ici est (Int, Node)
et je veux tourner dans un plan de (Int -> NodeSeq)
Vous devez vous connecter pour publier un commentaire.
Groupe et le projet:
Plus scalish façon d'utiliser le pli, en la manière que il y (sauter
map f
étape).Pour les Googlers qui n'attendent pas de doublons ou bien avec la par défaut en double manipulation politique:
De 2.12, la politique par défaut de lit:
Voici une autre alternative:
Map[String, SeqView[String,Seq[_]]]
... est-ce intentionnel?SeqView[String,Seq[_]]
est aussi unSeq[String]
. Toujours avec le recul, je ne pense pas que c'est utile, j'ai donc enlevé leview
.mapValues
fera une vue de toute façon sur les valeurs.x.groupBy(_._1).mapValues(_.map(_._2)).map(identity)
parce que lemapValues
expression sera recalculée chaque fois qu'il est utilisé. Voir issues.scala-lang.org/browse/SI-7005Pour les Googlers qui ne se soucient de doublons:
De départ
Scala 2.13
, la plupart des collections sont fournis avec la groupMap méthode qui est (comme son nom l'indique) un équivalent (plus efficace) d'ungroupBy
suivie parmapValues
:Ce:
group
s des éléments basés sur la première partie de n-uplets (groupe partie de groupeCarte)map
s groupées des valeurs en prenant leur deuxième tuple partie (carte de la partie de groupe deCarte)C'est un équivalent de
list.groupBy(_._1).mapValues(_.map(_._2))
mais réalisée en un seul passage par le biais de la Liste.Ici est un Scala idiomatiques moyen de convertir une liste de tuples d'une carte de la manipulation des doubles des clés. Vous souhaitez utiliser un pli.
Ci-dessous vous pouvez trouver quelques solutions. (GroupBy, FoldLeft, D'Agrégation, De L'Étincelle)
GroupBy variation
Pli à Gauche de la variation
Globale Variations Similaires à plier Gauche
Étincelle Variation - Pour les grands ensembles de données (Conversion d'un CA et d'une simple Carte de RDD)
Vous pouvez essayer ce