¿Por qué la versión inmutable de ListMap se almacena en orden ascendente, mientras que la versión mutable se almacena en orden descendente?¿Por qué los ListMaps mutables e inmutables tienen diferentes pedidos en Scala?
Aquí es una prueba de que se puede utilizar si tienes scalatest-1.6.1.jar y junit-4.9.jar
@Test def StackoverflowQuestion()
{
val map = Map("A" -> 5, "B" -> 12, "C" -> 2, "D" -> 9, "E" -> 18)
val sortedIMMUTABLEMap = collection.immutable.ListMap[String, Int](map.toList.sortBy[Int](_._2): _*)
println("head : " + sortedIMMUTABLEMap.head._2)
println("last : " + sortedIMMUTABLEMap.last._2)
sortedIMMUTABLEMap.foreach(X => println(X))
assert(sortedIMMUTABLEMap.head._2 < sortedIMMUTABLEMap.last._2)
val sortedMUTABLEMap = collection.mutable.ListMap[String, Int](map.toList.sortBy[Int](_._2): _*)
println("head : " + sortedMUTABLEMap.head._2)
println("last : " + sortedMUTABLEMap.last._2)
sortedMUTABLEMap.foreach(X => println(X))
assert(sortedMUTABLEMap.head._2 > sortedMUTABLEMap.last._2)
}
Aquí está la salida de la prueba de adelantamiento:
head : 2
last : 18
(C,2)
(A,5)
(D,9)
(B,12)
(E,18)
head : 18
last : 2
(E,18)
(B,12)
(D,9)
(A,5)
(C,2)
una ventaja importante de una buena API de colecciones es que le protege de tener que "exhaustivamente aprender todas las excentricidades como esta". El orden de iteración no forma parte del contrato de cualquiera de los 'ListMap', por lo que nunca tendrá que pensar en ello. –
Una descripción de interfaz menos específica deja más espacio para futuros cambios/mejoras. Si desea un comportamiento confiable en términos de orden de elementos, use un 'SortedMap'. – Raphael
Gracias mapa ordenado funciona bien para mí. – Zasz