2012-10-17 44 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 }