按升序排序数组..?

时间:2011-04-28 08:50:36

标签: iphone objective-c nsmutablearray nssortdescriptor

很抱歉问愚蠢的问题..

我有一个包含类对象的数组,如:

Class User {
     NSString *firstName, *LastName;
}
@property (nonatomic, retail) NSString *firstName;
@property (nonatomic, retail) NSString *LastName;

我正在创建此类的对象并将其添加到NSMutableArray中。

现在我想用名字对这个数组进行排序..请任意。

我可以使用NSSortDescriptor对此数组进行排序,或者我必须使用自定义逻辑。

我之前已经做过这件事,但现在我忘记了这一点,现在没有源代码......

请帮帮我.. 感谢

EDIT:我收到了一些回复,我尝试了但没有工作。我正在解析JSON,因此myArray中将有未知数量的对象。所以我用过:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
[myArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

 NSMutableArray *tempArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

但没有任何效果......

Edit 2

以下是说明: 阵列

    "<User: 0xa3f13c0>",
    "<User: 0xa3f1410>",
    "<User: 0xa3f1450>",
    "<User: 0xa3f1490>"

排序数组

"<User: 0xa3f13c0>",
"<User: 0xa3f1410>",
"<User: 0xa3f1490>",
"<User: 0xa3f1450>"

for for循环: 阵列

John
abc
test
qwertg

排序数组

John
abc
test
qwertg

2 个答案:

答案 0 :(得分:9)

如果您的目标是iOS4 +,那么您可以使用sortUsingComparator:方法:

[yourArray sortUsingComparator:^(id obj1, id obj2){

        User* u1 = (User*)obj1;
        User* u2 = (User*)obj2;
        return [u1.firstName compare:u2.firstName];
    }];

修改:由于比较方法会考虑字符大小写,因此您可能需要使用caseInsensitiveCompare:方法代替它:

[yourArray sortUsingComparator:^(id obj1, id obj2){

        User* u1 = (User*)obj1;
        User* u2 = (User*)obj2;
        return [u1.firstName caseInsensitiveCompare:u2.firstName];
    }];

答案 1 :(得分:4)

这可能是您正在寻找的最简洁的方法:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
[myArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

排序数组的一种有趣方法是使用代码块,如果你不需要pre ios4向后兼容性

[myMutableArray sortUsingComparator:
^(id a, id b) 
{
    User *userA = (User *)a;
    User *userB = (User *)b;
    return [userA.firstName compare:userB.firstName]; 
}];

这将允许您在那里添加一些额外的逻辑,以防您将来想要使用其他或其他排序条件。