2012-03-17 36 views
17

Tôi có danh sách đối tượng thuộc loại A. Trong lần lặp đầu tiên, tôi gán cho mỗi đối tượng một giá trị gấp đôi 0 < x < 1 và sau đó muốn sắp xếp từng đối tượng theo giá trị x của nó.Cách đơn giản nhất để sắp xếp danh sách đối tượng

Hiện tại tôi sử dụng lớp trình bao bọc lưu trữ đối tượng và giá trị x của nó để tạo danh sách có thể so sánh.

Có datatype được cung cấp bởi Scala cho phép tôi một cái gì đó như:

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

và sau đó

println(result.mkString) 

Trả lời

31

Bạn thực sự có thể làm được điều này khá dễ dàng với Scala bình thường liệt kê và sortBy phương pháp của họ. Dưới đây là phiên REPL ngắn gọn cho biết cách thực hiện:

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

Sử dụng bộ dữ liệu thay vì tạo lớp trình bao bọc mới.

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

Điều tốt đẹp về bộ dữ liệu là phần đầu tiên sẽ sắp xếp theo phần đầu tiên và các mối quan hệ sẽ bị vỡ bởi các phần tiếp theo! – schmmd

3

Tôi làm như thế này. Để nhận được các từ c hàng đầu trong một bản đồ băm:

def getTopCWordsDeclarative(input: mutable.HashMap[String, Int], c: Int): Map[String, Int] = { 
    val sortedInput = input.toList.sortWith(_._2 > _._2) 
    sortedInput.take(c).toMap 
    } 
Các vấn đề liên quan