2016-03-05 20 views
7

Pomóż mi zrozumieć ten kod Scala:Zrozumienie kodu Scala (-_._ 2)

sortBy(-_._2) 

Rozumiem, że pierwszy podkreślenia (_) jest symbolem zastępczym. Rozumiem, że _2 oznacza drugiego członka krotki. Ale co oznacza minus (-) w tym kodzie?

+18

myślę, że to ma coś wspólnego z '° \ _ (ツ) _/operator'. –

+0

@LukasEder Zastanawiasz się, co zrobiłby ten operator. :-) – marcospereira

+3

@marcospereira: Zwykle używa się go do przechwytywania i ignorowania wyjątku '(╯ ° □ °) ╯(┻━┻' –

Odpowiedz

14

Odwrócona kolejność (tj malejąco), sortowania według minus drugie pole krotki

podkreślenia jest anonimowy parametr, więc -_ jest w zasadzie taki sam jak x => -x

Some Przykłady w zwykłym 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) 
4

Sortuj sortuje według ascending aby domyślnie. Aby odwrócić kolejność, można dodać przedrostek - (Minus), jak już wyjaśniono przez @TrustNoOne.

Więc sortBy(-_._2) sortuje według wartości drugiego z z Tuple2 ale w odwrotnej kolejności.

Dłuższy przykład:

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

jest taka sama jak

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