我一直在阅读一些关于订购NSMutable数组的帖子,但是在使用它时遇到了麻烦,基本上我在tableview中有很多条目,可以添加无限量,但我需要通过NSMutable来订购它们包含数值的数组,远远高于10.我真的很感激任何人都可以给我的帮助,我一直在使用比较参数,但我似乎无法让它扭转顺序,其次我读过超过10的数字会以奇怪的方式开始排序。我很快就会发布代码,但是我要考虑的任何事情都会很棒。
由于
答案 0 :(得分: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.
注意比较器块中的减号,它可以使顺序从增加到减少。
如果你有一个字符串的数组,并且你以同样的方式继续,那么你会得到你所谓的“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.