2010-05-07 18 views
29

मेरे पास एक ऑब्जेक्ट है जो एक बड़े एनएसएमयूटेबल डिक्शनरी में है, और यह पता लगाने की आवश्यकता है कि इसमें कौन सी कुंजी है। तो मैं दोनों कॉलम से "टेबल" देखना चाहता हूं। न केवल चाबियों के साथ, बल्कि वस्तुओं के साथ (कुंजी प्राप्त करने के लिए)। क्या यह संभव है?किसी दिए गए ऑब्जेक्ट के लिए एनएसएमयूटेबल डिक्शनरी से कुंजी कैसे प्राप्त करें?

- (NSArray *)allKeysForObject:(id)anObject 

उत्तर

67

माता पिता वर्ग (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject 

कौन सा एक दिया वस्तु मूल्य के लिए सभी चाबियों का एक NSArray वापस आ जाएगी करने के लिए देखो:

6

पर एक नजर डालें। लेकिन यह डिक्शनरी के प्रत्येक ऑब्जेक्ट को एक इक्वेल संदेश भेजकर ऐसा करता है ताकि आपके बड़े डेटासेट के लिए यह सर्वोत्तम प्रदर्शन न हो।

हो सकता है कि आप अतिरिक्त अनुक्रमण संरचना संरचना (रों) के कुछ फार्म धारण करने के लिए आप उन्हें भीतर कुछ महत्वपूर्ण मूल्यों पर वस्तुओं का पता लगाने के लिए, प्रत्यक्ष वस्तु तुलना बिना चाबी से जुड़ा हुआ

19

आप में सवाल का जवाब देने की अनुमति देनी होगी एक अधिक विशिष्ट तरीके से, एक विशेष वस्तु के लिए एक महत्वपूर्ण प्राप्त करने के लिए निम्नलिखित का उपयोग करें:

NSString *knownObject = @"the object"; 
NSArray *temp = [dict allKeysForObject:knownObject]; 
NSString *key = [temp objectAtIndex:0]; 

//"key" is now equal to the key of the object you were looking for 
6

यह निश्चित रूप से NSDictionary के ब्लॉक विधि के साथ संभव है

- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate; 

आपको ऐसी वस्तुओं को वापस करने की आवश्यकता है जो कुछ शर्त (भविष्यवाणी) को पूरा करते हैं।

इस तरह यह प्रयोग करें: अधिक जानकारी के

How do I specify the block object/predicate required by NSDictionary's keysOfEntriesPassingTest?

के लिए इस उत्तर

NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { 

     BOOL found = (objectForWhichIWantTheKey == obj); 
     if (found) *stop = YES; 
     return found; 

    }]; 

चेक आउट

संबंधित मुद्दे