Ho una mappa che devo mappare a un tipo diverso e il risultato deve essere una lista. Ho due modi (apparentemente) per realizzare ciò che voglio, dal momento che chiamare la mappa su una mappa sembra sempre risultare in una mappa. Supponendo che ho qualche mappa che assomiglia:Conversione di una mappa Scala in una lista
val input = Map[String, List[Int]]("rk1" -> List(1,2,3), "rk2" -> List(4,5,6))
posso neanche fare:
val output = input.map{ case(k,v) => (k.getBytes, v) } toList
Oppure:
val output = input.foldRight(List[Pair[Array[Byte], List[Int]]]()){ (el, res) =>
(el._1.getBytes, el._2) :: res
}
Nel primo esempio si converte il tipo, e quindi chiamare toList . Presumo che il runtime è qualcosa come O(n*2)
e lo spazio richiesto è n*2
. Nel secondo esempio, converto il tipo e generi la lista in un colpo solo. Presumo che il runtime sia O(n)
e lo spazio richiesto sia n
.
La mia domanda è, sono sostanzialmente identici o la seconda conversione è ridotta alla memoria/ora/ecc.? Inoltre, dove posso trovare informazioni sui costi di archiviazione e runtime di varie scale conversion?
Grazie in anticipo.
+1. Per coloro che cercano di capire come funziona 'breakOut', vedere l'eccellente risposta di Daniel Sobral, http://stackoverflow.com/questions/1715681/scala-2-8-breakout/1716558#1716558 –