sorting - titulo - que son los mapas geograficos
Clasificación del mapa Scala (2)
¿Cómo puedo ordenar un mapa de este tipo:
"01" -> List(34,12,14,23), "11" -> List(22,11,34)
por los valores iniciales?
Como se indicó, el tipo de Map
predeterminado no está clasificado, pero siempre hay un SortedMap
import collection.immutable.SortedMap
SortedMap("01" -> List(34,12,14,23), "11" -> List(22,11,34))
Aunque supongo que no puedes usar eso, porque reconozco esta tarea y sospecho que TU mapa es el resultado de una operación grupal. Así que tienes que crear un SortedMap vacío y agregar los valores:
val unsorted = Map("01" -> List(34,12,14,23), "11" -> List(22,11,34))
val sorted = SortedMap.empty[String, List[Int]] ++ unsorted
//or
val sorted = SortedMap(unsorted.toSeq:_*)
O si no está conectado a la interfaz del Map
, simplemente puede convertirlo en una secuencia de tuplas. Tenga en cuenta que este enfoque solo funcionará si tanto las claves como los valores tienen un orden definido. Las listas no tienen un orden predeterminado definido, por lo que esto no funcionará con su código de ejemplo; por lo tanto, inventé algunos otros números.
val unsorted = Map("01" -> 56, "11" -> 34)
val sorted = unsorted.toSeq.sorted
Esto podría ser útil si primero puede convertir sus listas a algún otro tipo (como un String), lo que se hace mejor usando mapValues
actualización: vea la respuesta de Landei, que muestra cómo puede proporcionar una función de ordenación personalizada que hará que este enfoque funcione.
Una forma es usar scala.collection.immutable.TreeMap, que siempre está ordenado por claves:
val t = TreeMap("01" -> List(34,12,14,23), "11" -> List(22,11,34))
//If you have already a map...
val m = Map("01" -> List(34,12,14,23), "11" -> List(22,11,34))
//... use this
val t = TreeMap(m.toSeq:_*)
Puedes convertirlo en un Seq o List y ordenarlo, también:
//by specifying an element for sorting
m.toSeq.sortBy(_._1) //sort by comparing keys
m.toSeq.sortBy(_._2) //sort by comparing values
//by providing a sort function
m.toSeq.sortWith(_._1 < _._1) //sort by comparing keys
Hay muchas posibilidades, cada una más o menos conveniente en un contexto determinado.