Objective-c按最后一个对象排序数组

时间:2012-02-20 21:42:37

标签: objective-c sorting nsmutablearray

排序数组的数组有问题。我已经构建了排序方法,但它无法正常工作。我的意思是最终表应按最后一个元素排序,使用最后一个元素降序。

我的方法:

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}

问题在哪里?

1 个答案:

答案 0 :(得分:3)

排序后,您没有确切说出阵列的确切问题。我看到两个可能的问题。

  1. 正如Eimantas在评论中所说,你是按相反顺序(从最高到最低)对数组进行排序。如果您想要从最低到最高排序,则需要说return [catA compare:catB]

  2. 看起来catAcatB的元素是字符串,而不是数字,因此您将它们排序为字符串。字符串'10'小于字符串'9',但数字10大于数字9.即使您将元素转换为NSNumber,也不会更改基础对象的类型,这仍然是NSString

  3. 您可以这样对它们进行排序:

    [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];
    }]