2016-03-05 4 views
7

मुझे इस स्काला कोड समझने में सहायता करें:समझौता स्काला कोड: (-_._ 2)

sortBy(-_._2) 

मैं समझता हूँ कि पहले अंडरस्कोर (_) एक प्लेसहोल्डर है। मैं समझता हूं कि _2 का अर्थ है टुपल का दूसरा सदस्य। लेकिन इस कोड में एक ऋण (-) खड़ा है?

+18

ही मुझे लगता है कि यह '¯ \ _ (ツ) _ /' ऑपरेटर के साथ कुछ किया है। –

+0

@ लुकासडर इस ऑपरेटर के बारे में उत्सुकता के बारे में उत्सुक है। :-) – marcospereira

+3

@marcospereira: आमतौर पर इसे '(╯ ° □ °) ╯(┻━┻ 'अपवाद को पकड़ने और अनदेखा करने के लिए उपयोग किया जाता है –

उत्तर

14

क्रम उलटा (यानी उतरते), आप तरह से शून्य से टपल

अंडरस्कोर के दूसरे क्षेत्र है एक गुमनाम पैरामीटर, इसलिए -_ मूल रूप से के रूप में एक्स => -x

कुछ ही है सादा स्केला में उदाहरण: डिफ़ॉल्ट के रूप में ascending आदेश से एक तरह से

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

क्रमबद्ध। ऑर्डर को उलटा करने के लिए - (मिनस) को पूर्ववत किया जा सकता है, जैसा कि पहले से ही @TrustNoOne द्वारा समझाया गया है।

तो दूसरा मान एक Tuple2 की द्वारा लेकिन उलटे क्रम में sortBy(-_._2) प्रकार।

एक लंबे समय तक उदाहरण:

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