सबसे आसान तरीका उन पर एक अंतर्निहित आदेश [टी] को परिभाषित करना है, लेकिन फिर आपको इस क्रम को सॉर्ट फ़ंक्शन (या किसी अन्य फ़ंक्शन से तुलना करना चाहता है) को पास करना होगा। इसे पूरी तरह से पारित करना भी संभव है।
एक और तरीका होगा, एक अंतर्निहित कलाकारों के माध्यम से < ऑपरेटर द्वारा टपल वर्ग का विस्तार करने के:
implicit def compareTuple[T](lhs: (T,T)) = new {
def <(rhs: (T,T)) = lhs._1<rhs._1 || (lhs._1==rhs._1 && lhs._2<rhs._2)
}
संपादित करें: आप अन्य तुलना ऑपरेटरों भी करना चाहते हैं, तो आप उन्हें मिल सकता है आदेश दिया से [टी] इनहेरिट द्वारा:
implicit def compareTuple[T](lhs: (T,T)) = new Ordered[(T,T)] {
def compare(rhs: (T,T)) = ...
}
EDIT2: आप भी tuples की तुलना करने की जरूरत है विभिन्न आकारों में, आप उत्पाद इटरेटर फ़ंक्शन का उपयोग कर सकते हैं जिसे सभी ट्यूपल क्लासेस (see documentation) में परिभाषित किया गया है और आपको ट्यूपल पर एक इटरेटर प्राप्त करने की अनुमति देता है। इस तरह आप एक समारोह लिख सकते हैं जैसे आप इसे एक सूची के साथ करेंगे।
edit3: कुछ यह होगा की तरह:
implicit def compareTuple[T <: Product](lhs: T) = new Ordered[T] {
def compare[U <: Product](rhs: U) = {
def compare(lhs: Any, rhs: Any) = ...
def iteratorCompare(lhs: Iterator[Any], rhs: Iterator[Any]):Int =
if(!lhs.hasNext)
if(!rhs.hasNext)
0
else
-1
else if(!rhs.hasNext)
1
else
compare(lhs.next,rhs.next)
iteratorCompare(lhs.productIterator,rhs.productIterator)
}
}
लेकिन इस दृष्टिकोण आप प्रकार के बारे में देखभाल करने के लिए है के साथ। क्योंकि फ़ंक्शन ट्यूपल तत्वों के प्रकारों को नहीं जानता है (वे एक ही टुपल के अंदर अलग हो सकते हैं), यह केवल आपको एक इटरेटर [कोई भी] प्रदान कर सकता है। तो आपको अपनी इच्छित चीज़ों को संभालने के लिए तुलना (कोई भी, कोई भी) फ़ंक्शन परिभाषित करना होगा।
अच्छे अंक, डैनियल। मैंने अपने प्रश्न को राज्य में संपादित किया है तुलना की तुलना में हमेशा एक ही धैर्य है। गैर-आदेशित प्रकारों के लिए, मेरे tuples में प्रतीकों होना चाहिए (यही कारण है कि मैं सूचियों के बजाय tuples के लिए गया था), लेकिन क्योंकि मुझे प्रतीकों का ऑर्डर करने का कोई तरीका नहीं मिला है, इसलिए, मैं संख्याओं का उपयोग करूंगा। क्या मुझे सूचियों का उपयोग करना चाहिए? अगर मुझे सूची में प्रतीकों को जोड़ने की ज़रूरत है तो क्या होगा? – lasaro
@lasaro ठीक है, अब आप समस्या को सरल बनाते हैं, एक अपेक्षाकृत आसान समाधान है। संपादित उत्तर देखें। –
धन्यवाद डैनियल, आपके लिए बहुत संक्षिप्त उदाहरण है। – lasaro