2012-10-17 43 views
1
class P(val a: Int, val b: Int) 
val listp = List[P](new P(2,1)) 
listp.sortWith((p1, p2) => p1.b < p2.b) 
listp.sortBy(p => (p.b)) 

listp容易梳理語法排序匿名列表

val list = List((2, 1)) 
list.sortWith((a1, b1), (a2, b2) => b1 < b2) // Too many arguements 
list.sortWith(((a1, b1), (a2, b2)) => b1 < b2) // Not a legal formal parameter/<error> is already defined as <error> 
list.sortBy((a, b) => (b))      // wrong number of parameters expected 

我怎麼樣list?所有的方法調用列表導致編譯錯誤(我知道我忽略了返回值,我只關心語法)。

我只是在尋找匿名函數的語法。我知道在Java中可以像Comparable那樣繼承Ordered

編輯 - 這是爲我做的,感謝所有的答案:

list.sortWith(_._2 < _._2) 
list.sortBy(_._2) 
list.sortWith((t1, t2) => t1._2 < t2._2) 

這是它明確

list.sortWith((t1: Tuple2[Int, Int], t2: Tuple2[Int, Int]) => t1._2 < t2._2) 

回答

5

試試這個:

scala> val list = List((2, 1),(5,-10)) 
list: List[(Int, Int)] = List((2,1), (5,-10)) 

scala> list.sortWith{ case ((a1, b1), (a2, b2)) => b1 < b2} 
res1: List[(Int, Int)] = List((5,-10), (2,1)) 
+0

如果列表是一個List [INT,INT]爲什麼我們需要這裏的模式匹配?我覺得它只是一種避免語法應該是的方法。 – aepurniet

+0

它不是List [Int,Int],它是List [(Int,Int)]。如果你想有一個類似參數的方式從元組中提取值,模式匹配是必需的。另一種方法是使用'(l,r)=> l._1 pedrofurla

1
val list = List((2,1), (3,4)) 

list.sort(_._1 < _._2) 

res0: List[(Int, Int)] = List((2,1), (3,4)) 
+0

甜!任何想法如果我避免'_' – aepurniet

+0

list.sort((a,b)=> a._1 Brian

+3

'sort'已被棄用;不要使用它 –

9

鑑於

val list = List((2,1), (3,4)) 

通過第二個元素進行排序:

list.sortBy(_._2) 

或太多冗長:

list.sortBy { case(a,b) => b }