2016-03-05 15 views
7

aiutarmi a capire questo codice Scala:Comprensione codice Scala: (-_._ 2)

sortBy(-_._2) 

Capisco che la prima sottolineatura (_) è un segnaposto. Capisco che _2 significhi il secondo membro di una tupla. Ma cosa significa un segno meno() in questo codice?

+18

Penso che abbia qualcosa a che fare con la '¯ operatore \ _ (ツ) _ /'. –

+0

@LukasEder È curioso di sapere cosa farebbe questo operatore. :-) – marcospereira

+3

@marcospereira: di solito è usato per catturare e ignorare l'eccezione '(╯ ° □ °) ╯(┻━┻' –

risposta

14

ordine inverso (cioè discendente), si ordina per meno il secondo campo della tupla

La sottolineatura è un parametro anonima, in modo -_ è fondamentalmente lo stesso come x => -x

Alcuni esempi in scala normale:

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

Ordina per i tipi di ascending ordine come predefinito. Per invertire l'ordine è possibile anteporre un - (meno), come già spiegato da @TrustNoOne.

Quindi sortBy(-_._2) ordina dal secondo valore di un Tuple2 ma nell'ordine inverso.

Un esempio più:

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

è lo stesso di

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