2012-03-17 3 views
17

나는 A 유형의 객체 목록을 가지고 있습니다. 첫 번째 반복에서는 각 객체에 double 값 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

당신은 실제로 정상 스칼라로 아주 쉽게 수행 할 수 있습니다 나열하고 그 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

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 
    } 
관련 문제