-hash
के लिए दस्तावेज़ कहते हैं, जबकि एक परिवर्तनशील वस्तु एक संग्रह में संग्रहीत किया जाता है, और इसी प्रकार -isEqual:
के लिए दस्तावेज़ कहते हैं -hash
मूल्य बराबर वस्तुओं के लिए ही होना चाहिए इसे बदल नहीं करना चाहिए।तकनीक वस्तुओं
यह देखते हुए, क्या किसी को -hash
को लागू करने के सर्वोत्तम तरीके के लिए कोई सुझाव है, जैसे कि यह दोनों स्थितियों को पूरा करता है और फिर भी वास्तव में समझदारी से गणना की जाती है (यानी 0
वापस नहीं आती)? क्या कोई जानता है कि फ्रेमवर्क-प्रदान किए गए वर्गों के उत्परिवर्तनीय संस्करण कैसे करते हैं?
सबसे सरल बात यह है कि बस पहली शर्त भूल जाएं (इसके बारे में नहीं बदल रहा है) और केवल यह सुनिश्चित करें कि संग्रह में होने पर मैं कभी भी किसी ऑब्जेक्ट को गलती से बदल नहीं सकता, लेकिन मुझे आश्चर्य है कि कोई समाधान है या नहीं लचीला।
संपादित करें: मैं यहाँ सोच रहा हूँ कि क्या यह 2 ठेके बनाए रखने के लिए संभव है (जहां बराबर वस्तुओं बराबर हैश है, और जब तक वस्तु एक संग्रह में है हैश में परिवर्तन नहीं करते) जब मैं आंतरिक परिवर्तनशील रहा हूँ वस्तु की स्थिति। मेरा झुकाव "नहीं" कहना है, जब तक कि मैं हमेशा बेवकूफ कुछ नहीं करता जैसे हमेशा हैश के लिए 0 लौटाता हूं, लेकिन यही कारण है कि मैं यह सवाल पूछ रहा हूं।
अनुमान लगाएं कि यह एक पुराना सवाल है, बस इसे मिला ... लेकिन आमतौर पर प्रतिलिपि बनाई गई संग्रह में कुंजियों के रूप में उपयोग की जाने वाली म्यूटेबल ऑब्जेक्ट्स नहीं हैं? क्या वह समस्या को दूर नहीं करता है? – nielsbot
@nielsbot: NSDories के लिए केवल कुंजी कॉपी की गई हैं। एनएसएससेट अपनी ऑब्जेक्ट्स की प्रतिलिपि नहीं बनाता है, और 'CFDictionarySetValue() 'API एपीआई अपनी चाबियाँ कॉपी नहीं करता है। –
'CFDictionarySetValue' करता है अगर आप' CFCCreate' को 'kCFTypeDictionaryKeyCallbacks' पास करते हैं, नहीं? दस्तावेज़ लगभग गैर-संवेदनात्मक हैं ... मुझे लगता है कि एक उत्परिवर्तनीय संग्रह obj सकता है, ओह, हैश मानों को कैश कर सकता है, जो एक संग्रह में एक परिवर्तनीय obj मानने के समान है, अपने हैश को नहीं बदलेगा, है ना? – nielsbot