Próbowałem użyć mapy Map.map, aby przekonwertować mapę na listę krotek. Jednak to się nie udaje. Zrobiłem następujące eksperymenty:Scala: zamapuj mapę na listę krotek
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))
zauważyć, jak lista jest generowany dla pojedynczych elementów (R1), ale mapa jest produkowany przez krotki (R3). Nawet wymuszenie działania nie zadziałało (r2). Wywołało to tylko jednoznaczne wywołanie Seq (r4) Więc moje pytanie brzmi: dlaczego/w jaki sposób Map.map "automagicznie" tworzy nową mapę, a nie na przykład listę? W rzeczywistości, w jaki sposób określono typ zwrotu (Seq, List, itp.)
Co jest nie tak z 'm.toList'? Zwróć też uwagę, że mapowanie w kolekcji zwraca inną kolekcję tego samego typu, więc nie możesz odwzajemnić odwzorowania listy na 'Mapie', chyba że wywołasz na niej' .toList'. –
@Ende - Nic nie jest nie tak. Zobacz komentarz poniżej. – user2051561