2016-06-16 37 views
0

我有一個看起來像這樣的列表List(List(0, 2), List(0, 3), List(2, 3), List(3, 2), List(3, 0), List(2, 0))),注意這個列表將只包含對,並且不會包含重複對。我想按這個較大列表中每個子列表中的第二個項目降序排列列表。如果有重複的值,我並不是真的先到先得。如何按照Scala中每對中第二項的降序對數字對列表進行排序?

對於這種情況下,答案可能看起來像List(List(0,3), List(2,3), List(0,2), List(3,2), List(3,0), List(2,0))

我的想法是通過較大的列表循環和獲取包含在每對每個第二個項目的列表和排序的,但我無法跟蹤其第二個項目在每一對之後都屬於哪一對。也許有更聰明的方法?

回答

3

你可以簡單地做:

list.sortBy(-_(1)) 
4

一個簡單的解決辦法是:

list.sortBy(-_.last) 
2

如果列表總是長度爲2,我會用元組而不是列表。然後,它只是一個使用sortBy

scala> val l1 = List(List(0, 2), List(0, 3), List(2, 3), List(3, 2), List(3, 0), List(2, 0)) 
l1: List[List[Int]] = List(List(0, 2), List(0, 3), List(2, 3), List(3, 2), List(3, 0), List(2, 0)) 

scala> val l2 = l1.map(x => (x(0), x(1))) 
l2: List[(Int, Int)] = List((0,2), (0,3), (2,3), (3,2), (3,0), (2,0)) 

scala> l2.sortBy(-_._2) 
res1: List[(Int, Int)] = List((0,3), (2,3), (0,2), (3,2), (3,0), (2,0)) 
0

list.sortBy(sublist => -1 * sublist.tail.head)

+0

至於其他的答案表明,你可以在這裏使用'_'語法的事 –

相關問題