了解Scala代码:( - _._ 2)

时间:2016-03-05 13:38:39

标签: scala

帮助我理解这个Scala代码:

sortBy(-_._2)

我知道第一个下划线(_)是一个占位符。我知道_2意味着元组的第二个成员。 但是这个代码中的减号(-)代表什么?

2 个答案:

答案 0 :(得分:14)

反向顺序(即降序),按负元组的第二个字段

排序

下划线是一个匿名参数,所以-_基本上与x =>相同。 -x

普通scala中的一些例子:

scala> List(1,2,3).sortBy(-_)
res0: List[Int] = List(3, 2, 1)

scala> List("a"->1,"b"->2, "c"->3).sortBy(-_._2)
res1: List[(String, Int)] = List((c,3), (b,2), (a,1))

scala> List(1,2,3).sortBy(x => -x)
res2: List[Int] = List(3, 2, 1)

答案 1 :(得分:5)

按默认排序ascending排序。要颠倒顺序,可以预先加-(减号),正如@TrustNoOne所解释的那样。

所以sortBy(-_._2)Tuple2第二个值进行排序,但顺序相反。

更长的例子:

scala> Map("a"->1,"b"->2, "c"->3).toList.sortBy(-_._2)
res1: List[(String, Int)] = List((c,3), (b,2), (a,1))

相同
scala> Map("a"->1,"b"->2, "c"->3).toList sortBy { case (key,value) => - value }
res1: List[(String, Int)] = List((c,3), (b,2), (a,1))