में कनवर्ट करें NSDictionary
के लिए कुंजी के रूप में सरणी की वस्तुओं के एक int फ़ील्ड का उपयोग करके NSArray
को NSDictionary
में कैसे परिवर्तित कर सकता हूं?NSArray को NSDictionary
उत्तर
- (NSDictionary *) indexKeyedDictionaryFromArray:(NSArray *)array
{
id objectInstance;
NSUInteger indexKey = 0U;
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
for (objectInstance in array)
[mutableDictionary setObject:objectInstance forKey:[NSNumber numberWithUnsignedInt:indexKey++]];
return (NSDictionary *)[mutableDictionary autorelease];
}
यह NSArray
पर एक श्रेणी एक्सटेंशन जोड़ता है। C99
मोड की आवश्यकता है (जो इन दिनों डिफ़ॉल्ट है, लेकिन बस मामले में)।
एक .h
फ़ाइल कहीं कि #import
सभी ने एड हो सकते हैं ..
@interface NSArray (indexKeyedDictionaryExtension)
- (NSDictionary *)indexKeyedDictionary
@end
एक .m
फ़ाइल में ..
@implementation NSArray (indexKeyedDictionaryExtension)
- (NSDictionary *)indexKeyedDictionary
{
NSUInteger arrayCount = [self count];
id arrayObjects[arrayCount], objectKeys[arrayCount];
[self getObjects:arrayObjects range:NSMakeRange(0UL, arrayCount)];
for(NSUInteger index = 0UL; index < arrayCount; index++) { objectKeys[index] = [NSNumber numberWithUnsignedInteger:index]; }
return([NSDictionary dictionaryWithObjects:arrayObjects forKeys:objectKeys count:arrayCount]);
}
@end
उदाहरण उपयोग:
NSArray *array = [NSArray arrayWithObjects:@"zero", @"one", @"two", NULL];
NSDictionary *dictionary = [array indexKeyedDictionary];
NSLog(@"dictionary: %@", dictionary);
आउटपुट:
2009-09-12 08:41:53.128 test[66757:903] dictionary: {
0 = zero;
1 = one;
2 = two;
}
मैंने Linq to ObjectiveC नामक एक साधारण लाइब्रेरी बनाई है, जो कि विधियों का संग्रह है जो इस तरह की समस्या को हल करने में बहुत आसान बनाता है।
NSDictionary* dictionary = [sourceArray toDictionaryWithKeySelector:^id(id item) {
return [item intField];
}];
यह एक शब्दकोश जहां कुंजी स्रोत सरणी में intField
द्वारा दिया जाता है देता है: अपने मामले में आप Linq-to-ObjectiveC toDictionary विधि है, जहां अपने 'int' फ़ील्ड एक प्रमुख चयनकर्ता के माध्यम से निर्दिष्ट किया जाता है की जरूरत है।
इस जादू का प्रयास करें:
NSDictionary *dict = [NSDictionary dictionaryWithObjects:records
forKeys:[records valueForKey:@"intField"]];
FYI करें इस वजह से संभव हो सकता है इस में निर्मित सुविधा:
@interface NSArray(NSKeyValueCoding)
/* Return an array containing the results of invoking -valueForKey:
on each of the receiver's elements. The returned array will contain
NSNull elements for each instance of -valueForKey: returning nil.
*/
- (id)valueForKey:(NSString *)key;
यह वास्तव में एक जादू है! सुरुचिपूर्ण और वास्तव में आसान समाधान! बस एक नोट: शायद उपयोग करने के लिए बेहतर [रिकॉर्ड्स वैल्यू फोर्के: @ "अन्य फ़ील्ड"] सिर्फ रिकॉर्ड नहीं, क्योंकि इसमें "इंटीफिल्ड" भी शामिल होगा। वैसे भी कोडिंग के वर्षों के बाद भी यह मेरे लिए नया है ... – BootMaker
- (NSDictionary *) indexKeyedDictionaryFromArray:(NSArray *)array
{
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop){
NSNumber *index = [NSNumber numberWithInteger:idx];
[mutableDictionary setObject:obj forKey:index];
}];
NSDictionary *result = [NSDictionary.alloc initWithDictionary:mutableDictionary];
return result;
}
यह कर्मचारी सूची NSMutableArray
से एक NSMutableDictionary
बनाने का एक उदाहरण है :
NSMutableArray *emloyees = [[NSMutableArray alloc]initWithObjects:@"saman",@"Ruchira",@"Rukshan",@"ishan",@"Harsha",@"Ghihan",@"Lakmali",@"Dasuni", nil];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSString *word in emloyees) {
NSString *firstLetter = [[word substringToIndex:1] uppercaseString];
letterList = [dict objectForKey:firstLetter];
if (!letterList) {
letterList = [NSMutableArray array];
[dict setObject:letterList forKey:firstLetter];
}
[letterList addObject:word];} NSLog(@"dic %@",dict);
- 1. NSArray और NSDictionary
- 2. NSDictionary बनाम। NSArray
- 3. डिकोड JSON NSArray या NSDictionary
- 4. NSDictionary का NSArray - सरल प्रारंभिक वाक्यविन्यास
- 5. NSDictionary
- 6. nsarray
- 7. NSArray
- 8. NSArray
- 9. NSDictionary writeToFile
- 10. NSArray
- 11. nsarray
- 12. NSArray
- 13. NSArray
- 14. NSDictionary/NSArray/Property List (plist) को क्रमबद्ध करने के लिए जिसमें NSNull
- 15. कोको: कस्टम ऑब्जेक्ट्स के लिए जेसन स्ट्रिंग को deserialize (NSDictionary, NSArray नहीं)
- 16. उद्देश्य-सी ऑब्जेक्ट (NSArray या NSDictionary) में संग्रहीत डेटा को डंप करने के लिए कैसे करें
- 17. NSMutableArray NSArray को
- 18. NSDictionary
- 19. बंद करो NSDictionary
- 20. NSDictionary
- 21. NSDictionary
- 22. NSDictionary
- 23. NSDictionary
- 24. NSDictionary को CFDictionaryRef कास्टिंग?
- 25. NSDictionary को NSString
- 26. NSUserDefaults को NSDictionary सहेजना
- 27. JSON से NSArray
- 28. एक NSDictionary मूल्य
- 29. क्रैश NSArray
- 30. सरणी - NSArray
मुझे श्रेणियों का उपयोग करना अच्छा लगता है, इसलिए मैं इसे सीधे ऑब्जेक्ट पर कॉल करने के तरीके के कारण एक सरल फ़ंक्शन का उपयोग करने के बजाय इस समाधान को प्रीफर कर दूंगा, जैसे कि यह हमेशा उस विधि को जानता था। – Woofy