我一直在阅读一些关于订购 NSMutable 数组的帖子,但无法使其正常工作,基本上我在 tableview 中有许多条目,可以添加无限量但我需要通过包含的 NSMutable 数组订购它们数值,这将远高于 10。我非常感谢任何人可以给我的任何帮助,我一直在使用 compare 参数,但我似乎无法让它反转顺序,其次我阅读了上面的数字10 会以一种奇怪的方式开始订购。我很快就会发布你的代码,但任何让我思考的东西都会很棒。
谢谢
我一直在阅读一些关于订购 NSMutable 数组的帖子,但无法使其正常工作,基本上我在 tableview 中有许多条目,可以添加无限量但我需要通过包含的 NSMutable 数组订购它们数值,这将远高于 10。我非常感谢任何人可以给我的任何帮助,我一直在使用 compare 参数,但我似乎无法让它反转顺序,其次我阅读了上面的数字10 会以一种奇怪的方式开始订购。我很快就会发布你的代码,但任何让我思考的东西都会很棒。
谢谢
答案取决于数组中的对象是数字还是字符串。还有各种对数组进行排序的方法(sortUsingDescriptors
, sortUsingComparator
, ...)。
如果您有一个numbers数组,则可以按降序对它们进行排序,例如:
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.