2012-03-17 64 views
17

我有一个类型的对象列表A.在第一次迭代中,我指定每个对象的双值0 < x < 1,然后要根据它的x值排序每个对象。最简单的方法来排序对象列表

目前我使用一个包装类来存储对象和它的x值来做一个类似的列表。

是否存在被斯卡拉提供的数据类型,让我是这样的:

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

然后

println(result.mkString) 

回答

31

实际上,你可以用正常的Scala做到这一点很容易地列出他们sortBy方法。这里是一个简短的REPL会话,展示了如何:

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

使用元组而不是创建一个新的包装类。

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

元组的好处在于它将首先按第一部分排序,并且关系将被后续部分打破! – schmmd 2012-03-18 22:29:38

3

我走这样。为了获得散列图中的顶级c词:

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