/ / Scala में एक सेट दूसरे से कम कब है? - स्कैला, स्कैला-संग्रह

स्कैला में एक से कम सेट कब होता है? - स्कैला, स्कैला-संग्रह

मैं स्काला में दो सेटों की कार्डिनैलिटी की तुलना करना चाहता था। स्कैला में कभी-कभी "बस काम" के बाद से, मैंने उपयोग करने की कोशिश की < सेट के बीच। ऐसा लगता है के माध्यम से जाना है, लेकिन मैं किसी भी परिणाम से मतलब नहीं कर सकते।

उदाहरण:

scala> Set(1,2,3) < Set(1,4)
res20: Boolean = true
  • यह क्या लौटाता है?
  • मैं एपीआई में इस पद्धति के बारे में कहां पढ़ सकता हूं?
  • क्यों isn "t यह कहीं भी सूचीबद्ध नहीं है scala.collection.immutable.Set?

अपडेट: यहां तक ​​कि क्रमसेट में तत्वों के (i) पदार्थ प्रतीत होते हैं:

scala> Set(2,3,1) < Set(1,3)
res24: Boolean = false

scala> Set(1,2,3) < Set(1,3)
res25: Boolean = true

उत्तर:

जवाब के लिए 5 № 1

यह 2.8 के साथ "t काम नहीं करता है। स्केल 2.7 पर, यह क्या होता है:

scala.Predef.iterable2ordered(Set(1, 2, 3): Iterable[Int]) < (Set(1, 3, 2): Iterable[Int])

दूसरे शब्दों में, एक अंतर्निहित रूपांतरण पर परिभाषित किया गया है scala.Predef, जो सभी स्कैला कोड के लिए "आयातित" है, एक से Iterable[A] एक को Ordered[Iterable[A]], वहाँ प्रदान की एक निहित है A => Ordered[A] उपलब्ध।

यह देखते हुए कि सेटों के लिए चलने का क्रम हैअपरिभाषित, आप "इसके बारे में वास्तव में ज्यादा भविष्यवाणी नहीं कर सकते। यदि आप सेट के आकार को चार से बड़ा करने के लिए तत्व जोड़ते हैं, उदाहरण के लिए, तो आप पूरी तरह से अलग परिणाम प्राप्त करेंगे।"


उत्तर № 2 के लिए 1

यदि आप कार्डिनैलिटी की तुलना करना चाहते हैं, तो सीधे ऐसा करें:

scala> Set(1, 2, 3).size < Set(2, 3, 4, 5).size
res0: Boolean = true

जवाब के लिए 0 № 3

स्काला का मेरा ज्ञान व्यापक नहीं है, लेकिन कुछ परीक्षण करने के बाद, मैं निम्नलिखित प्राप्त करता हूं:

scala> Set(1,2) <
<console>:5: error: missing arguments for method < in trait Ordered;
follow this method with `_" if you want to treat it as a partially applied function
Set(1,2) <
^

वह मुझे बताता है < विशेषता से आता है Ordered। अधिक संकेत:

scala> Set(1,2) < _
res4: (Iterable[Int]) => Boolean = <function>

यह है की Set एक में मूल्यांकन किया है Iterable, क्योंकि शायद कुछ अंतर्निहित रूपांतरण हैIterable [A] से ऑर्डर किया गया [Iterable [A]], लेकिन मुझे अब यकीन नहीं है ... सुसंगत नहीं हैं। उदाहरण के लिए, ये दोनों एक तरह की लेक्सोग्राफ़िक तुलना का सुझाव दे सकते हैं:

scala> Set(1,2,3) < Set(1,2,4)
res5: Boolean = true

1 बराबर है, 2 बराबर है, 3 4 से कम है।

scala> Set(1,2,4) < Set(1,2,3)
res6: Boolean = false

लेकिन इन लोगों को "टी:

scala> Set(2,1) < Set(2,4)
res11: Boolean = true

scala> Set(2,1) < Set(2,2)
res12: Boolean = false

मुझे लगता है कि सही उत्तर वह है जो इसमें पाया जाता है Ordered विशेषता उचित: के लिए कोई कार्यान्वयन नहीं है < उनके हैशकोड की तुलना करने से अधिक सेट के बीच:

यह महत्वपूर्ण है कि हैशकोड विधि के लिए एआदेशित [ए] का उदाहरण तुलना विधि के अनुरूप होना चाहिए। हालांकि, एक समझदार डिफ़ॉल्ट कार्यान्वयन प्रदान करना संभव नहीं है। इसलिए, यदि आपको आदेशित [ए] के उदाहरण के हैश की गणना करने में सक्षम होने की आवश्यकता है, तो आपको अपने आप को या तो तब प्रदान करना चाहिए जब कोई अनहोनी या तात्कालिकता हो।