दिलचस्प पोस्ट
बनाम गैर-पहचान रिश्ते की पहचान करने के बारे में अभी भी उलझन में है JavaScript स्ट्रिंग में कितने बाइट हैं? SQL सर्वर बीसीपी निर्यात दूषित फ़ाइल? मेरी छवि के नीचे स्थान क्यों है? Global.aspx के Application_Start में पूर्ण होस्ट नाम + पोर्ट नंबर कैसे प्राप्त करें? मैं अपाचे जीज़िप संपीड़न कैसे काम कर सकता हूं? स्कैनर क्लास से अगले () और अगली लाइन () विधियों के बीच अंतर क्या है? मैं Laravel के साथ मुखौटा वर्ग कैसे बना सकता हूं? वीएस 2012 में एमवीसी 5 प्रोजेक्ट बनाएं और चलाएं JQuery का उपयोग करके मैं एक तत्व का आईडी कैसे प्राप्त करूं? ++ कुछ विभवणीय बनाम। कुछ वैरिएबल + + जावास्क्रिप्ट में JavaFx लेबल में बदलते मूल्य प्रदर्शित करना Mac OS X 10.6.8 के लिए Pygame इंस्टॉल करना Jstl में foreach लूप से सूचक मूल्य कैसे प्राप्त करें कस्टम UITabBar पृष्ठभूमि छवि आईओएस 5 और बाद में काम नहीं कर रहा है

SortedArrayUsingDescriptors का उपयोग कर NSMutableArray सॉर्ट करने के लिए कैसे?

मुझे NSMutableArray सॉर्ट करने के बारे में एक सवाल है मैं sortedArrayUsingDescriptors: उपयोग कर सकते हैं sortedArrayUsingDescriptors: वस्तुओं के साथ एक सरणी सॉर्ट करने के लिए विधि

उदाहरण के लिए मेरे पास places की एक NSMutableArray है जहां मेरे पास एक विशेषता frequency (इंट वैल्यू) है और मैं frequency पर अवरोही क्रमबद्ध करना चाहता हूं लेकिन मुझे यह नहीं पता कि यह कैसे सही तरीके से उपयोग करना है

क्या मैं initWithKey में एक कुंजी के रूप में रखा है?

मेरे ऑब्जेक्ट place में शामिल हैं:

 NSString * name; NSString * address; NSString * frequency; NSString * type; 

 NSMutableArray * places; ... populate array with objects ... NSSortDescriptor * sortByFrequency = [[[NSSortDescriptor alloc] initWithKey:@"????????" ascending:NO] autorelease]; NSArray * descriptors = [NSArray arrayWithObject:sortByFrequency]; NSArray * sorted = [x sortedArrayUsingDescriptors:descriptors]; 

Solutions Collecting From Web of "SortedArrayUsingDescriptors का उपयोग कर NSMutableArray सॉर्ट करने के लिए कैसे?"

वस्तुओं की अपनी सरणी को सॉर्ट करने के लिए:

  1. सेटअप NSSortDescriptor – उन चर पर चयन करने के लिए चयनकर्ता को सॉर्ट करने के लिए सेटअप NSSortDescriptor रूप में अपने चर के नाम का उपयोग करें
  2. आपके द्वारा सेटअप किया गया NSSortDescriptor का उपयोग करते हुए NSSortDescriptor की सरणी प्राप्त करें
  3. उन वर्णों के आधार पर आपके सरणी को सॉर्ट करें

यहाँ दो उदाहरण हैं, एक NSDictionary और NSString/NSNumber का उपयोग करने वाले NSDictionary पर सॉर्ट करने वाले मान, दो NSString क्षेत्रों पर सॉर्ट करने के साथ कस्टम क्लास का उपयोग करते हुए दूसरा।

अधिक उदाहरणों और स्पष्टीकरण देखने के लिए कोको प्रोग्रामिंग विषयों में NSArray ऑब्जेक्ट को छंटनी और छानने का पालन करें।

उदाहरण :

यह GNUStep पर किया गया था यह कोको पर एक ही काम करना चाहिए – कोड बिल्कुल वैसा है – जब मैं अपने मैक के सामने बैठूँगा तो मैं कोशिश करूंगा:

NSNumber मान पर छंटनी के साथ NSString और NSNumber मान का उपयोग करने के पहले उदाहरण:

 NSString * NAME = @"name"; NSString * ADDRESS = @"address"; NSString * FREQUENCY = @"frequency"; NSString * TYPE = @"type"; NSMutableArray * array = [NSMutableArray array]; NSDictionary * dict; dict = [NSDictionary dictionaryWithObjectsAndKeys: @"Alehandro", NAME, @"Sydney", ADDRESS, [NSNumber numberWithInt:100], FREQUENCY, @"T", TYPE, nil]; [array addObject:dict]; dict = [NSDictionary dictionaryWithObjectsAndKeys: @"Xentro", NAME, @"Melbourne", ADDRESS, [NSNumber numberWithInt:50], FREQUENCY, @"X", TYPE, nil]; [array addObject:dict]; dict = [NSDictionary dictionaryWithObjectsAndKeys: @"John", NAME, @"Perth", ADDRESS, [NSNumber numberWithInt:75], FREQUENCY, @"A", TYPE, nil]; [array addObject:dict]; dict = [NSDictionary dictionaryWithObjectsAndKeys: @"Fjord", NAME, @"Brisbane", ADDRESS, [NSNumber numberWithInt:20], FREQUENCY, @"B", TYPE, nil]; [array addObject:dict]; 

फ़्रिक्वेंसी फ़ील्ड के साथ डिस्क्रिप्टर का उपयोग करके हिस्सा छंटनी है जो NSNumber :

 NSSortDescriptor * frequencyDescriptor = [[[NSSortDescriptor alloc] initWithKey:FREQUENCY ascending:YES] autorelease]; id obj; NSEnumerator * enumerator = [array objectEnumerator]; while ((obj = [enumerator nextObject])) NSLog(@"%@", obj); NSArray * descriptors = [NSArray arrayWithObjects:frequencyDescriptor, nil]; NSArray * sortedArray = [array sortedArrayUsingDescriptors:descriptors]; NSLog(@"\nSorted ..."); enumerator = [sortedArray objectEnumerator]; while ((obj = [enumerator nextObject])) NSLog(@"%@", obj); 

आउटपुट – फ़्रीक्वेंसी फ़ील्ड द्वारा सॉर्ट किया गया:

 2009-12-04 x[1] {address = Sydney; frequency = 100; name = Alehandro; type = T; } 2009-12-04 x[1] {address = Melbourne; frequency = 50; name = Xentro; type = X; } 2009-12-04 x[1] {address = Perth; frequency = 75; name = John; type = A; } 2009-12-04 x[1] {address = Brisbane; frequency = 20; name = Fjord; type = B; } 2009-12-04 x[1] Sorted ... 2009-12-04 x[1] {address = Brisbane; frequency = 20; name = Fjord; type = B; } 2009-12-04 x[1] {address = Melbourne; frequency = 50; name = Xentro; type = X; } 2009-12-04 x[1] {address = Perth; frequency = 75; name = John; type = A; } 2009-12-04 x[1] {address = Sydney; frequency = 100; name = Alehandro; type = T; } 


कस्टम वर्ग के साथ दूसरा उदाहरण और दो NSString चर पर छंटनी

सॉर्ट करने के लिए एरे (तल पर क्लास A देखें):

 NSMutableArray * array = [NSMutableArray array]; [array addObject:[[A alloc] initWithFirstName:@"Alehandro" lastName:@"Xentro" age:[NSNumber numberWithInt:40]]]; [array addObject:[[A alloc] initWithFirstName:@"John" lastName:@"Smith" age:[NSNumber numberWithInt:30]]]; [array addObject:[[A alloc] initWithFirstName:@"John" lastName:@"Smyth" age:[NSNumber numberWithInt:25]]]; [array addObject:[[A alloc] initWithFirstName:@"Torro" lastName:@"Ola" age:[NSNumber numberWithInt:45]]]; [array addObject:[[A alloc] initWithFirstName:@"Alehandro" lastName:@"Bento" age:[NSNumber numberWithInt:41]]]; [array addObject:[[A alloc] initWithFirstName:@"Alehandro" lastName:@"Axel" age:[NSNumber numberWithInt:41]]]; 

सॉर्टिंग पार्ट, lastName पर क्रमबद्ध करें तब पहलेनाम:

 NSString * LASTNAME = @"lastName"; NSString * FIRSTNAME = @"firstName"; NSSortDescriptor *lastDescriptor = [[[NSSortDescriptor alloc] initWithKey:LASTNAME ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease]; NSSortDescriptor *firstDescriptor = [[[NSSortDescriptor alloc] initWithKey:FIRSTNAME ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease]; NSArray * descriptors = [NSArray arrayWithObjects:lastDescriptor, firstDescriptor, nil]; NSArray * sortedArray = [array sortedArrayUsingDescriptors:descriptors]; 

परिणाम प्रिंट करें:

 NSLog(@"\nSorted ..."); enumerator = [sortedArray objectEnumerator]; while ((obj = [enumerator nextObject])) NSLog(@"%@", obj); 

परिणाम (सॉर्टिंग से पहले और बाद में):

 2009-12-04 00:52:16.637 x[11375] Alehandro, Xentro, age:40 2009-12-04 00:52:16.644 x[11375] John, Smith, age:30 2009-12-04 00:52:16.644 x[11375] John, Smyth, age:25 2009-12-04 00:52:16.644 x[11375] Torro, Ola, age:45 2009-12-04 00:52:16.645 x[11375] Alehandro, Bento, age:41 2009-12-04 00:52:16.645 x[11375] Alehandro, Axel, age:41 2009-12-04 00:52:16.645 x[11375] Sorted ... 2009-12-04 00:52:16.645 x[11375] Alehandro, Axel, age:41 2009-12-04 00:52:16.645 x[11375] Alehandro, Bento, age:41 2009-12-04 00:52:16.645 x[11375] Torro, Ola, age:45 2009-12-04 00:52:16.645 x[11375] John, Smith, age:30 2009-12-04 00:52:16.645 x[11375] John, Smyth, age:25 2009-12-04 00:52:16.645 x[11375] Alehandro, Xentro, age:40 

वर्ग A NSObject विस्तारित है – यहां कुछ खास नहीं है:

 #import <Foundation/Foundation.h> @interface A : NSObject { NSString * firstName; NSString * lastName; NSNumber * age; } - (id)initWithFirstName:(NSString*)aFirstName lastName:(NSString*)aLastName age:(NSNumber*)anAge; -(NSString* )description; +(NSString*)action; @end 

कार्यान्वयन:

 #import <Foundation/Foundation.h> #import "Ah" @implementation A - (id)init { return [self initWithFirstName:@"N/A" lastName:@"N/A" age:0]; } - (id)initWithFirstName:(NSString*)aFirstName lastName:(NSString*)aLastName age:(NSNumber*)anAge { self = [super init]; if (!self) return nil; firstName = [aFirstName copy]; lastName = [aLastName copy]; age = [anAge copy]; return self; } - (void)dealloc { [firstName release]; [lastName release]; [age release]; [super release]; } 

 - (NSString *) description { return [NSString stringWithFormat: @"%@, %@, age:%@", firstName, lastName, age]; } @end 

"कुंजी" आपकी ऑब्जेक्ट्स की एक विधि है (आपके सरणी "x" के तत्व) जो आप जिस चीज़ को सॉर्ट करना चाहते हैं वह देता है तो इस मामले में, आपने कहा था कि आप "आवृत्ति" के आधार पर सॉर्ट करना चाहते हैं। फिर आपको जो करना है, वह विधि के नाम का उपयोग करें, जो कुंजी के रूप में आवृत्ति लौटाता है।

यहां बताया गया है कि कैसे एक NSMutableArray सॉर्ट होगा:

 NSMutableArray *numberSort =[[NSMutableArray alloc] init]; while ((key = [enumerator nextObject])) { //(NSNumber *)integer = [key integerValue]; [numberSort addObject:[NSNumber numberWithInt:[key intValue]]]; // code that uses the returned key } NSArray *stringSort = [numberSort sortedArrayUsingSelector:@selector(compare:)]; enumerator = [stringSort objectEnumerator]; NSNumber *intKey; NSMutableArray *backToString =[[NSMutableArray alloc] init]; while ((intKey = [enumerator nextObject])) { //(NSNumber *)integer = [key integerValue]; [backToString addObject:[intKey stringValue]]; // code that uses the returned key