2012-07-25 21 views
16

संभव डुप्लिकेट जाँच करने के लिए एक elgant तरीका खोज रहे हैं:
How to check if an NSDictionary or NSMutableDictionary contains a key?अगर एक कुंजी एक शब्दकोश में exsists

मैं शब्दकोश से कुंजी (तार) की एक सरणी प्राप्त कर सकते हैं फिर इसके माध्यम से एक स्ट्रिंग की तुलना करना एक कुंजी कर रहा है, जिसे मैं जांचना चाहता हूं और देख सकता हूं कि उस शब्दकोश में कुंजी है जो मैं चाहता हूं।

लेकिन क्या यह देखने के लिए और अधिक सुरुचिपूर्ण है कि कुंजीपटल शब्दकोश में मौजूद है या नहीं?

 NSArray * keys = [taglistDict allKeys]; 
     for (NSString *key in keys) 
     { 
      // do string compare etc 
     } 

-Code

+0

2014 उत्तर: http://stackoverflow.com/a/22001925/294884 – Fattie

उत्तर

37

एक NSDictionarynil मूल्यों को शामिल नहीं कर सकते, तो आप बस [NSDictionary objectForKey:] उपयोग कर सकते हैं जो nil वापस आ जाएगी, तो कुंजी मौजूद नहीं है:

BOOL exists = [taglistDict objectForKey:key] != nil; 

संपादित करें: @ ने उल्लेख किया ओएमजीपीओपी, यह निम्नलिखित वाक्यविन्यास का उपयोग करके उद्देश्य-सी अक्षर का उपयोग करके भी काम करता है:

NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" }; 

if (dict[@"key3"]) 
    NSLog(@"Exists"); 
else 
    NSLog(@"Does not exist"); 

प्रिंटों:

Does not exist 
+0

आधुनिक objc के बारे में क्या? अगर मैं dict [@ "key"] का उपयोग करता हूं तो यह – OMGPOP

+0

@OMGPOP को क्रैश करेगा यह मेरे लिए काम करता है। – trojanfoe

+0

यह मेरे लिए काम नहीं करता है। त्रुटि देता है – Moxarth

-2

कुंजी मान लिया जाये प्रकार NSString की है और keys एक शब्दकोश है, तो आप के बजाय की तरह कुछ का उपयोग करना चाहिए:

if [keys containObject:key] { 
// do something 
} 
9

Trojanfoe संभावना बेहतर है, लेकिन आप यह भी कर सकते थे करें:

[[taglistDict allKeys]containsObject:key] 
+0

सरल एक लाइनर! – Shailesh

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