objective-c – 如何排序NSMutableArray使用sortedArrayUsingDescriptors?

objective-c – 如何排序NSMutableArray使用sortedArrayUsingDescriptors?,第1张

概述我有一个关于排序NSMutableArray的问题。我可以使用sortedArrayUsingDescriptors:方法来对对象排序数组。 例如,我有一个NSMutableArray的地方,我有一个属性频率(int值),我想按照频率降序排序,但我现在不知道如果我如何使用它正确。 我在initWithKey中作为一个键放什么? 我的对象的地方包含: NSString * name;NSStrin 我有一个关于排序NSMutableArray的问题。我可以使用sortedArrayUsingDescriptors:方法来对对象排序数组。

例如,我有一个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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1042695.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存