按降序排序NSMutable数组

Smo*_*ugh 3 nsmutablearray

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

谢谢

Mar*_*n R 6

答案取决于数组中的对象是数字还是字符串.也有不同的方法(来排序列sortUsingDescriptors,sortUsingComparator...).

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

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.
Run Code Online (Sandbox Code Playgroud)

注意比较器块中的减号,它具有将顺序从增加反转为减少的效果.

如果你有一个字符串数组,并且你以相同的方式继续,那么你将得到你所谓的"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.
Run Code Online (Sandbox Code Playgroud)

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

解决方案是使用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.
Run Code Online (Sandbox Code Playgroud)