Ho provato a utilizzare Map.map per convertire una mappa in un elenco di tuple. Tuttavia questo fallisce. Ho fatto i seguenti esperimenti:Scala: mappa a Mappa per elenco tuple
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))
Si noti come una lista è generato per singoli elementi (R1), ma una mappa viene prodotto per le tuple (r3). Non forzare nemmeno il tipo lavorato (r2). Solo una chiamata esplicita a Seq l'ha fatto (r4) Quindi la mia domanda è: perché/come Map.map "automagicamente" crea una nuova mappa e non una lista per esempio? Infatti come è il tipo di reddito determinato (Seq, List, ecc)
Cosa c'è di sbagliato in 'm.toList'? Si noti inoltre che il mapping su una raccolta restituisce un'altra raccolta dello stesso tipo, quindi non è possibile restituire una mappatura di lista su una 'Mappa ', a meno che non si chiami' .toList' su di essa. –
@Ende - Niente è sbagliato. Vedi il commento qui sotto. – user2051561