排序数组的数组有问题。我已经构建了排序方法,但它无法正常工作。我的意思是最终表应按最后一个元素排序,使用最后一个元素降序。
我的方法:
static NSInteger order (id a, id b, void* context)
{
NSNumber* catA = [a lastObject];
NSNumber* catB = [b lastObject];
return [ catB compare: catA];
}
并通过以下方式调用:
[ array sortUsingFunction:order context:NULL];
我的数组就是那样:
{1,9}
{1,6}
{1,5}
{2,2}
{0,18}
{12, 10}
{9,1}
问题在哪里?
答案 0 :(得分:3)
排序后,您没有确切说出阵列的确切问题。我看到两个可能的问题。
正如Eimantas在评论中所说,你是按相反顺序(从最高到最低)对数组进行排序。如果您想要从最低到最高排序,则需要说return [catA compare:catB]
。
看起来catA
和catB
的元素是字符串,而不是数字,因此您将它们排序为字符串。字符串'10'小于字符串'9',但数字10大于数字9.即使您将元素转换为NSNumber
,也不会更改基础对象的类型,这仍然是NSString
。
您可以这样对它们进行排序:
[array sortUsingComparator:^(id a, id b) {
return [[a lastObject] intValue] - [[b lastObject] intValue];
}]
但是在排序数组之前将字符串转换为数字对象可能更好:
for (NSMutableArray *element in array) {
[element replaceObjectAtIndex:(element.count - 1)
withObject:[NSNumber numberWithInt:[element.lastObject intValue]]];
}
[array sortUsingComparator:^(id a, id b) {
return [[a lastObject] intValue] - [[b lastObject] intValue];
}]