Ich versuchte Map.map zu verwenden, um eine Karte in eine Liste von Tupeln zu konvertieren. Dies schlägt jedoch fehl. Ich habe die folgenden Versuche:Scala: Karte eine Karte zur Liste von Tupeln
val m = Map(("a" -> 1), ("b" -> 2))
//> m : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r1 = m.map{ case (k,v) => v} //> r1 : scala.collection.immutable.Iterable[Int] = List(1, 2)
def toTuple[A,B](a:A,b:B) = (a,b) //> toTuple: [A, B](a: A, b: B)(A, B)
//val r2: List[Tuple2[_,_]] = m.map(e => (e._1,e._2))
val r3 = m.map(e => toTuple(e._1,e._2)) //> r3 : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r4 = m.toSeq //> r4 : Seq[(String, Int)] = ArrayBuffer((a,1), (b,2))
Beachten Sie, wie eine Liste für einzelne Elemente erzeugt wird (R1), sondern eine Karte für Tupel (r3) hergestellt. Nicht einmal zwangsweise arbeitete der Typ (r2). Nur ein expliziter Aufruf von Seq tat es (r4) Also meine Frage ist, warum/wie funktioniert Map.map „automagically“ eine neue Karte und keine Liste zum Beispiel erstellen? In der Tat, wie ist der Rückgabetyp bestimmt (Seq, List, etc.)
Was mit 'm.toList' falsch ist? Beachten Sie auch, dass das Mapping für eine Sammlung eine andere Sammlung desselben Typs zurückgibt, so dass Sie eine Listenzuordnung für eine 'Map' nicht wirklich zurückgeben können, es sei denn, Sie rufen' .toList' darauf auf. –
@Ende - Nichts ist falsch. Siehe Kommentar unten. – user2051561