una titulo tipos son sirve sacar saber que puede primaria plano partes para numerica mapas mapa los hace grande grafica geográfico geograficos geografia escala ejemplos definiciones cuales concepto como clasificacion caracteristicas calcular barra sorting scala map

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.