2012-03-17 18 views
17

Tengo una lista de objetos de tipo A. En una primera iteración, asigno a cada objeto un valor doble 0 < x < 1 y luego deseo ordenar cada objeto según su valor x.Manera más sencilla para ordenar la lista de objetos

Actualmente utilizo una clase contenedora que almacena el objeto y su valor x para hacer una lista comparable.

¿Existe un tipo de datos proporcionado por Scala que me permite algo así como:

var result = new SortedList[Double, A] 
result.insert(x,a) 
result.insert(x1,a1) 
result.insert(x2,a2) 

y luego

println(result.mkString) 

Respuesta

31

Usted puede hacer esto con bastante facilidad con Scala normal de las listas y su método sortBy. Aquí hay una breve sesión de REPL que muestra cómo:

scala> class A(val value: Double) { override def toString = "A:" + value } 
defined class A 

scala> List(new A(6), new A(1), new A(3)) sortBy (_.value) 
res0: List[A] = List(A:1.0, A:3.0, A:6.0) 
11

Use tuplas en lugar de crear una nueva clase contenedora.

List((1.2, "a1"), (0.1, "a2"), (0.9, "a3")).sorted 
// List((0.1,a2), (0.9,a3), (1.2,a1)) 
+2

Lo bueno de las tuplas es que primero se ordenarán por la primera parte, y las ataduras se romperán por las partes siguientes. – schmmd

3

I get like this. Para obtener palabras c superiores en un hashmap:

def getTopCWordsDeclarative(input: mutable.HashMap[String, Int], c: Int): Map[String, Int] = { 
    val sortedInput = input.toList.sortWith(_._2 > _._2) 
    sortedInput.take(c).toMap 
    } 
Cuestiones relacionadas