繁体   English   中英

对NSString的NSArray进行排序

[英]Sorting an NSArray of NSString

有人可以告诉我排序NSMutableArray的代码吗? 我有以下NSMutableArray:

NSMutableArray *arr = [[NSMutableArray alloc] init];

具有诸如“2”,“4”,“5”,“1”,“9”等元素,它们都是NSString。

我想按降序对列表进行排序,以便最大值整数在列表中最高(索引0)。

我尝试了以下方法:

[arr sortUsingSelector:@selector(compare:)];

但它似乎没有正确地对我的价值进行排序。

有人能告诉我代码正确地做我想要完成的事情吗? 谢谢!

您应该使用此方法:

[arr sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

NSArray或:

[arr sortUsingSelector:@selector(caseInsensitiveCompare:)];

在“inplace”排序NSMutableArray

比较器应返回以下值之一:

  • NSOrderedAscending
  • NSOrderedDescending
  • NSOrderedSame

为字符串编写自己的比较方法非常简单:

@implementation NSString(compare)

-(NSComparisonResult)compareNumberStrings:(NSString *)str {
    NSNumber * me = [NSNumber numberWithInt:[self intValue]];
    NSNumber * you = [NSNumber numberWithInt:[str intValue]];

    return [you compare:me];
}

@end

如果数组的元素只是带有数字而没有字母的NSStrings(即“8”,“25”,“3”等),这里有一个干净简洁的方法,实际上有效:

NSArray *sortedArray = [unorderedArray sortedArrayUsingComparator:^(id a, id b) {
    return [a compare:b options:NSNumericSearch];
}];

完成! 无需编写返回NSComparisonResult的整个方法,或者返回8行NSSortDescriptor ...

恕我直言,这种数组排序的最简单方法是

[arr sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self.intValue" ascending:YES]]]

如果您的数组包含浮点值,只需将键更改为self.floatValueself.doubleValue

最简单的方法是制作像这样的比较器方法

NSArray *sortedStrings = [stringsArray sortedArrayUsingComparator:^NSComparisonResult(NSString *firstString, NSString *secondString) {
    return [[firstString lowercaseString] compare:[secondString lowercaseString]];
}];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM