Gibt es in Scala eine Möglichkeit, zwei Listen in eine Map umzuwandeln?
Ich habe zwei Listen, eine List[A]
und ein List[B]
. Was ich will ist ein Map[A,B]
aber ich will, dass die Semantik von zip
. So begann etwa so:
var tuplesOfAB = listOfA zip listOfB
Ich bin mir jetzt nicht sicher, wie Sie Sie konstruieren eine Map
aus meiner tuplesOfAB
.
Als follow-up-Frage, ich will auch umkehren meine Karte, so dass von einer Map[A,B]
ich eine Map[B,A]
. Kann jemand schlug mich mit einem clue-stick?
Kommentar zu dem Problem - Öffnen
Vielen Dank für diese Frage. Ich kam hierher, um es zu finden. Nun ich habe nicht zu bitten, es selbst. Kommentarautor: wheaties
InformationsquelleAutor der Frage Andy Hull | 2010-02-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
In 2.8 das ist wirklich einfach mit Hilfe der
CanBuildFrom
Funktionalität (wie von Daniel beschrieben) und mitbreakOut
mit einer Art Unterricht an den compiler, was das Ergebnis geben sollte:Folgendes würde auch funktionieren:
Und (wie EastSun, unten, hingewiesen hat) dies wurde Hinzugefügt, um die Bibliothek als
toMap
Als die Umkehrung der Karte können Sie tun:
InformationsquelleAutor der Antwort oxbow_lakes
Nun, du hast eine Liste von Tupeln ist es einfach, um es in eine Karte schreiben
Map(tuplesOfAB: _*)
. Die: _*
notation bedeutet, dass der Anruf der varargs überlastung mit den Argumenten, die aus der Sequenz. Dies scheint eine komische bit von der syntax, aber es hilft zu denken, dass varargs deklariert sind, wieMap[A,B](pairs: (A,B)*)
und die: _*
ist eine Art Anmerkung zu konvertieren, varargs, weil der gemeinsame*
Teil.Umkehren einer Karte
m
verwendenMap(m.map(_.swap): _*)
. In scala eine Karte ist auch eine Sammlung von Paaren. Damit verwandelt sich diese Paare durch das vertauschen der Elemente und übergeben Sie die Karte Konstruktor.InformationsquelleAutor der Antwort Geoff Reedy
Gibt es noch einen anderen Weg, es zu tun, über diejenigen hinaus, die bereits gezeigt. Hier:
InformationsquelleAutor der Antwort Daniel C. Sobral
InformationsquelleAutor der Antwort Ashwin