2012-03-17 63 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 
    } 
相關問題