
例如,我有一个NSMutableArray的地方,我有一个属性频率(int值),我想按照频率降序排序,但我现在不知道如果我如何使用它正确。
我在initWithKey中作为一个键放什么?
我的对象的地方包含:
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];解决方法 要对对象数组进行排序,请执行以下 *** 作:
> setup NSSortDescriptor – 使用变量的名称作为键来设置排序的描述符,以及要在这些键上执行的选择器
>使用您设置的NSSortDescriptor获取描述符数组
>根据这些描述符对数组进行排序
这里有两个例子,一个使用NSDictionary和Nsstring / NSNumber值排序NSNumber,另一个使用自定义类与两个Nsstring字段排序。
按照Sorting and Filtering NSArray Objects在Cocoa编程主题中查看更多的例子和解释。
例:
这是在GNUStep它应该工作相同的Cocoa – 代码是完全一样的 – 我会尝试,当我坐在我的Mac前面:
第一个示例使用Nsstring和NSNumber值对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",@"Melbourne",[NSNumber numberWithInt:50],@"X",nil];[array addobject:dict];dict = [NSDictionary dictionaryWithObjectsAndKeys: @"John",@"Perth",[NSNumber numberWithInt:75],@"A",nil];[array addobject:dict];dict = [NSDictionary dictionaryWithObjectsAndKeys: @"Fjord",@"Brisbane",[NSNumber numberWithInt:20],@"B",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);
OUTPUT – 按频率字段排序:
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然后firstname排序:
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:402009-12-04 00:52:16.644 x[11375] John,Smith,age:302009-12-04 00:52:16.644 x[11375] John,Smyth,age:252009-12-04 00:52:16.644 x[11375] Torro,ola,age:452009-12-04 00:52:16.645 x[11375] Alehandro,Bento,age:412009-12-04 00:52:16.645 x[11375] Alehandro,Axel,age:412009-12-04 00:52:16.645 x[11375]Sorted ...2009-12-04 00:52:16.645 x[11375] Alehandro,age:412009-12-04 00:52:16.645 x[11375] Torro,age:452009-12-04 00:52:16.645 x[11375] John,age:302009-12-04 00:52:16.645 x[11375] John,age:252009-12-04 00:52:16.645 x[11375] Alehandro,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 "A.h"@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 总结 以上是内存溢出为你收集整理的objective-c – 如何排序NSMutableArray使用sortedArrayUsingDescriptors?全部内容,希望文章能够帮你解决objective-c – 如何排序NSMutableArray使用sortedArrayUsingDescriptors?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)