NSArray
गारंटी नहीं देता है कि आप केवल किसी दिए गए ऑब्जेक्ट की एक प्रति स्टोर कर सकते हैं, इसलिए आपको यह सुनिश्चित करना होगा कि आप इसे स्वयं संभाल लें (या NSOrderedSet
का उपयोग करें)।
उस ने कहा, यहां कुछ दृष्टिकोण हैं। यदि श्रेणी श्रेणी शीर्षक से मेल खाने के लिए आपकी श्रेणी ऑब्जेक्ट isEqual:
लागू करती है, तो आप केवल -indexOfObject:
का उपयोग कर सकते हैं।
यदि आप ऐसा नहीं कर सकते हैं (क्योंकि श्रेणी वस्तुएं समानता की एक अलग परिभाषा का उपयोग करती हैं), -indexOfObjectPassingTest:
का उपयोग करें। यह एक ब्लॉक लेता है जिसमें आप अपना "परीक्षण" परिभाषित करने के लिए जो भी परीक्षण करना चाहते हैं - इस मामले में, category_title
स्ट्रिंग समानता का परीक्षण करना।
ध्यान दें कि ये सभी NSArray
के लिए घोषित किए गए हैं, इसलिए यदि आप केवल NSMutableArray
शीर्षलेख/दस्तावेज़ देख रहे हैं तो आप उन्हें नहीं देख पाएंगे।
संपादित करें: कोड नमूना। इस वर्ग CASCategory
की वस्तुओं मान लिया गया एक NSString
संपत्ति categoryTitle
साथ (मैं एक इवर नाम :-) में अंडरस्कोर डाल करने के लिए अपने आप को नहीं ला सकता है:
CASCategory *cat1 = [[CASCategory alloc] init];
[cat1 setCategoryTitle:@"foo"];
CASCategory *cat2 = [[CASCategory alloc] init];
[cat2 setCategoryTitle:@"bar"];
CASCategory *cat3 = [[CASCategory alloc] init];
[cat3 setCategoryTitle:@"baz"];
NSMutableArray *array = [NSMutableArray arrayWithObjects:cat1, cat2, cat3, nil];
[cat1 release];
[cat2 release];
[cat3 release];
NSUInteger barIndex = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
if ([[(CASCategory *)obj categoryTitle] isEqualToString:@"bar"]) {
*stop = YES;
return YES;
}
return NO;
}];
if (barIndex != NSNotFound) {
NSLog(@"The title of category at index %lu is %@", barIndex, [[array objectAtIndex:barIndex] categoryTitle]);
}
else {
NSLog(@"Not found");
}
स्रोत
2012-02-03 23:25:18
धन्यवाद। क्या आप indexOfObjectPassingTest का उपयोग करने के तरीके का एक स्निपेट पोस्ट कर सकते हैं? – jroyce
कृपया मेरा संपादन देखें। –
ठीक है कि बहुत सराहना की गई और वास्तव में जो मैं पूछ रहा था वह किया। – jroyce