2016-03-05 50 views
7

幫助我理解這個Scala代碼:瞭解Scala代碼:(-_._ 2)

sortBy(-_._2) 

我明白,第一個下劃線(_)是一個佔位符。據我所知,_2表示Tuple的第二個成員。 但是這個代碼中減號(-)代表什麼?

+18

我覺得它有什麼做的'¯\ _(ツ)_ /'運營商。 –

+0

@LukasEder對這個操作符會做什麼感到好奇。 :-) – marcospereira

+3

@marcospereira:它通常用於捕捉和忽略'(□°□°)╯(┻━┻'異常 –

回答

14

反向順序(即降序),則排序減去元組

下劃線的第二場是一個匿名參數,因此-_基本相同爲x => -x

一些在平原階的例子:

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) 
4

排序方式排序由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))