很抱歉问愚蠢的问题..
我有一个包含类对象的数组,如:
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
答案 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];
}];
这将允许您在那里添加一些额外的逻辑,以防您将来想要使用其他或其他排序条件。