Cómo ordenar una colección en Scala
Listas y matrices en Scala
La estructura de datos se define de la siguiente manera:
// Estructura de datos utilizada
val s = Lista( "a", "d", "F", "B", "e" )
val n = Lista(3, 7, 2, 1, 5)
p>val m = Mapa(
-2 -> 5,
2 ->6,
5 -> 9,
p>
1 -> 2,
0 -> -16,
- 1 -> -4 1 -> -4
)
Ordenar usando el método de clasificación integrado de Scala
s.s.sorted
res0: Lista = Lista(B, F, a , d, e)
n.sorted
res1: Lista[Int] = Lista(1, 2, 3, 5, 7)
¿Por qué no ¿No nos clasificamos aquí? ¡Esto se debe a que el objeto del mapa no tiene método de clasificación!
Búsqueda que distingue entre mayúsculas y minúsculas
Podemos usar sortWith en Scala para personalizar la función de clasificación que distingue entre mayúsculas y minúsculas.
toLowerCase < e2.toLowerCase)
s.sortWith( compfn1)
res2: Lista = Lista(a, B, d, e, F)
s .sortWith(compfn2)
res3: List = List(a, B, d, e, F)
/* O puedes usar la función anónima (gracias Rahul) */
s.sortWith(_.toLowerCase < _.toLowerCase)
res4: Lista = Lista(a, B, d, e, F)
Cómo Ordenar por claves o valores de mapa
De hecho, el código es muy simple, como se muestra a continuación:
//Puedes usar sorted para ordenar por clave
m.toList.SortWith( _.LowerCase < _.LowerCase.SortWith)
S.sortWith(_.LowerCase < _.LowerCase.SortWith)ordenado para cada {
caso (clave , valor) =>
println(clave + " = " + valor)
}
-2 = 5
-1 = -4
0 = -16
1 = 2
2 = 6
5 = 9
// Ordenar por valor
m.toList.sortBy(_._2) foreach {
case (clave, valor) =>
println( clave + " = " + valor)
}
0 = -16
-1 = -4
1 = 2
-2 = 5
2 = 6
5 = 9
Ordenar los datos de origen
Lo anterior la clasificación no afectará los datos originales, el resultado de la clasificación se almacena en otra variable:
scala> val a = Array(2,6,1,9,3,2,1,-23) p>
a: Matriz[Int] = Matriz(2, 6, 1, 9, 3, 2, 1, -23)
scala> scala.util.Sorting.quickSort(a)
scala> a.mkString("," )
res24: Cadena = -23,1,1,2,2,3,6,9
Como puede ver, una matriz Los datos han sido ordenados.
Si se ordena la n anterior, se informa el siguiente error:
scala> scala.util.Sorting.QuickSort(n)res35: Array[Int] = Array(1, 2, 3, 5, 7 )
Al ordenar la matriz se obtendrá Unit
scala> val a = Array(2,6,1,9,3,2,1,-23)
a:Array[Int] = Array(2, 6, 1, 9, 3, 2, 1, -23)
scala>scala.util.Sorting.stableSort(a)
scala>a.mkString(",")
res39: Cadena = -23,1,1,2,2,3,6,9