按降序排序NSMutablearray

时间:2012-10-15 15:55:18

标签: nsmutablearray

我一直在阅读一些关于订购NSMutable数组的帖子,但是在使用它时遇到了麻烦,基本上我在tableview中有很多条目,可以添加无限量,但我需要通过NSMutable来订购它们包含数值的数组,远远高于10.我真的很感激任何人都可以给我的帮助,我一直在使用比较参数,但我似乎无法让它扭转顺序,其次我读过超过10的数字会以奇怪的方式开始排序。我很快就会发布代码,但是我要考虑的任何事情都会很棒。

由于

1 个答案:

答案 0 :(得分:6)

答案取决于数组中的对象是数字还是字符串。还有各种方法可以对数组进行排序(sortUsingDescriptorssortUsingComparator,...)。

如果你有一个数字数组,你可以按递减顺序对它们进行排序,例如:

NSMutableArray *a = [NSMutableArray arrayWithObjects:@1, @55, @9, @17, nil];
[a sortUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {
    return -[obj1 compare:obj2];
}];
// Result: 55, 17, 9, 1.

注意比较器块中的减号,它可以使顺序从增加到减少。

如果你有一个字符串的数组,并且你以同样的方式继续,那么你会得到你所谓的“10以上的数字会以奇怪的方式开始排序”:

NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil];
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    return -[obj1 compare:obj2];
}];
// Result: 9, 55, 17, 1.

对象按字符串排序,而不是数字。

解决方案是使用NSNumericSearch选项:

NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil];
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    return -[obj1 compare:obj2 options:NSNumericSearch];
}];
// Result: 55, 17, 9, 1.