如何使用对象对NSArray进行排序

时间:2010-12-11 22:32:09

标签: ios sorting nsarray

我有NSArray个对象。每个对象都有几个属性。

例如: NSArray oneArray有5个对象。每个对象都具有以下属性:nameaddressZIP_Code

如何按NSArrayname进行排序?

3 个答案:

答案 0 :(得分:4)

NSSortDescriptor* dx = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSSortDescriptor* dy = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:NO selector:@selector(caseInsensitiveCompare:)];
[arr sortUsingDescriptors:[NSArray arrayWithObjects:dx, dy, nil]];
[dx release];
[dy release];

取自KennyTM发布的代码。由Jordan编辑实际工作;)将Array arr替换为您的阵列。修改以适应。

答案 1 :(得分:1)

    NSInteger nameSort(id obj1, id obj2, void *context)
    {
        NSComparisonResult result = [obj1.name compare:obj2.name];

        if (result == NSOrderedAscending) // stringOne < stringTwo
            return NSOrderedAscending;

        if (result == NSOrderedDescending) // stringOne > stringTwo
            return NSOrderedDecending;

        if (result == NSOrderedSame) // stringOne == stringTwo
            return NSOrderedSame;
    }
/*to sort oneArray*/ oneArray = [oneArray sortedArrayUsingFunction:nameSort context:NULL];

答案 2 :(得分:1)

我喜欢Jordan的答案,因为(1)我不知道NSSortDescriptor和(2)它对多个属性的排序很有用。

但我通常在我的班级中创建类似-(NSComparisionResult)compare:(MyClass*)otherObject的方法,然后使用-[myArray sortedArrayUsingSelector:@selector(compare:)]。比较方法本身类似于Jumhyn的答案,但我认为它更清晰,因为类本身比较了对象,而不是独立的函数。