NSDictionary - यह जांचने की आवश्यकता है कि क्या शब्दकोश में कुंजी-मूल्य जोड़ी है या नहीं


96

मुझे केवल अनुसरण करने के लिए कुछ पूछने की आवश्यकता है। मान लीजिए कि मैं एक शब्दकोश है।

NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
[xyz setValue:@"sagar" forKey:@"s"];
[xyz setValue:@"amit" forKey:@"a"];
[xyz setValue:@"nirav" forKey:@"n"];
[xyz setValue:@"abhishek" forKey:@"a"];
[xyz setValue:@"xrox" forKey:@"x"];

अब, मुझे निम्नानुसार जांच करने की आवश्यकता है

[xyz में मुख्य "b" मान होता है ?? जोड़ी है या नहीं?

प्रश्न है कैसे?

दूसरा सवाल यह है कि कुल कुंजी-मूल्य जोड़ी को कैसे गिना जाए?

उदाहरण के लिए कहो NSInteger mCount=[xyz keyCounts];

जवाबों:


193

बस इसके लिए पूछें objectForKey:@"b"। यदि यह वापस आता है nil, तो उस कुंजी पर कोई वस्तु सेट नहीं की जाती है।

if ([xyz objectForKey:@"b"]) {
    NSLog(@"There's an object set for key @\"b\"!");
} else {
    NSLog(@"No object set for key @\"b\"");
}

संपादित करें : आपके संपादित दूसरे प्रश्न के अनुसार, यह बस है NSUInteger mCount = [xyz count];। इन दोनों जवाबों को अच्छी तरह से प्रलेखित किया गया है और आसानी से एनएसडॉर श्रेणी संदर्भ ( [1] [२] ) में पाया जाता है।


+1 वास्तव में, प्रलेखन सीधे यह कहता है: developer.apple.com/mac/library/documentation/Cocoa/Reference/…
डेव डोंगलांग

6
क्या होगा यदि कुंजी शब्दकोश में मौजूद है और इसका मान 0 है? क्या हम गलती से यह नहीं सोचेंगे कि कुंजी शब्दकोश में मौजूद नहीं है?
jbx72487

13
@ jbx72487 डिक्शनरी में ऑब्जेक्ट होना चाहिए; objectForKey:एक idवस्तु-सी वस्तु के लिए एक सूचक लौटाता है । यदि आप संख्याएँ जमा कर रहे हैं, तो उन्हें एक NSNumber में "बॉक्सिंग" होना चाहिए । यहां तक ​​कि अगर NSNumber शून्य या गलत है, तो यह अभी भी एक वैध सूचक होगा और उपरोक्त कोड अस्तित्व का सही पता लगाएगा।
मैट बी।

मेरे साथ काम नहीं कर रहा है कि यह निम्नलिखित वापसी: न आया हुआ अपवाद 'NSInvalidArgumentException', कारण की वजह से उनका समापन एप्लिकेशन: '- [__ NSSingleObjectArrayI objectForKey:]: गैर मान्यता प्राप्त चयनकर्ता उदाहरण 0x60000133a1c0 के लिए भेजा'
अम्र गुस्सा

2

शाब्दिक वाक्य रचना के साथ आप निम्नानुसार जांच कर सकते हैं

static const NSString* kKeyToCheck = @"yourKey"
if (xyz[kKeyToCheck])
  NSLog(@"Key: %@, has Value: %@", kKeyToCheck, xyz[kKeyToCheck]);
else
 NSLog(@"Key pair do not exits for key: %@", kKeyToCheck); 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.