क्योंकि sorted
एक अंतर्निहित पैरामीटर ord
है:
डीईएफ़ अनुसार क्रमबद्ध [b>:] (अंतर्निहित ord: math.Ordering [बी]): सूची [एक] क्रमित इस क्रम एक आदेश के अनुसार ।
क्रमबद्ध है। यही है, तत्व जो बराबर हैं ( लेफ्टिनेंट द्वारा निर्धारित) क्रमबद्ध अनुक्रम में उसी क्रम में दिखाई देते हैं जैसे मूल में।
ord तत्वों की तुलना करने के लिए उपयोग करने के क्रम का आदेश।
और वहाँ एक अंतर्निहित रूपांतरण scala.math.Ordering
में परिभाषित किया गया है:
implicit def Tuple2[T1, T2](implicit ord1: Ordering[T1],
ord2: Ordering[T2]): Ordering[(T1, T2)]
तो l.sorted
l.sorted(scala.math.Ordering.Tuple2[Int, Int]())
को परिवर्तित हो जाएगा।
टेस्ट यह:
scala> def catchOrd[A](xs: A)(implicit ord: math.Ordering[A]) = ord
catchOrd: [A](xs: A)(implicit ord: scala.math.Ordering[A])scala.math.Ordering[A]
scala> catchOrd((1,2))
res1: scala.math.Ordering[(Int, Int)] = [email protected]
और निश्चित रूप से, आप कर सकते हैं परिभाषित अपनी खुद की Ordering
:
scala> implicit object IntTupleOrd extends math.Ordering[(Int, Int)] {
| def compare(x: (Int, Int), y: (Int, Int)): Int = {
| println(s"Hi, I am here with x: $x, y: $y")
| val a = x._1*x._2
| val b = y._1*y._2
| if(a > b) 1 else if(a < b) -1 else 0
| }
| }
defined object IntTupleOrd
scala> Seq((1, 10), (3, 4), (2, 3)).sorted
Hi, I am here with x: (1,10), y: (3,4)
Hi, I am here with x: (3,4), y: (2,3)
Hi, I am here with x: (1,10), y: (2,3)
res2: Seq[(Int, Int)] = List((2,3), (1,10), (3,4))
संपादितTuple[Int, Int]
समर्थन सभी निम्न विधियों में बनाने के लिए एक छोटी तरीका नहीं है: <
, <=
, >
, >=
।
scala> implicit def mkOps[A](x: A)(implicit ord: math.Ordering[A]): ord.Ops =
| ord.mkOrderingOps(x)
mkOps: [A](x: A)(implicit ord: scala.math.Ordering[A])ord.Ops
scala> (1, 2) < (3, 4)
res0: Boolean = true
scala> (1, 2) <= (3, 4)
res1: Boolean = true
scala> (1, 2, 3) <= (1, 2, 4)
res2: Boolean = true
scala> (3, 3, 3, 3) >= (3, 3, 3, 4)
res3: Boolean = false
मुझे नहीं पता। सॉर्टिंग टुपल्स कभी-कभी भ्रमित परिणामों का कारण बन सकती है। '(100 एल, 2 डी) :: (2 एल, 5001 डी) :: नील सॉर्टेड देता है: 'सूची ((2,5001.0), (100,2.0))'। ऐसा लगता है कि ट्यूपल के दूसरे तत्व पर कोई वेटेज नहीं है। – Ashesh
आदेश केवल तभी के दूसरे तत्व को देखता है जब पहले तत्व बराबर होते हैं। – Ashesh