使用自定义对象排序数组

时间:2012-03-24 15:01:39

标签: iphone objective-c xcode

我正在尝试对一个数组进行排序,这个数组充满了我编写的类中的对象。我编写的类包含一个NSString本身,作为“名称”。所以我想做的是根据对象包含的name属性对数组进行排序。我试过这么简单:

[anArray sortedArrayUsingSelecter: CaseInsensitiveCompare];

但是你可以猜到,它会将caseInsensitiveCompare消息发送给对象本身,并且它不会响应那个。

所以我猜我必须让我的对象能够响应caseInsensitiveCompare?不太确定如何编写这样的方法,所以任何指针都很可爱。

由于

2 个答案:

答案 0 :(得分:10)

您可以使用方法sortedArrayUsingComparator

NSArray *sortedArray = [anArray sortedArrayUsingComparator:^(MyClass *a, MyClass *b) {
    return [a.name caseInsensitiveCompare:b.name];
}];

答案 1 :(得分:1)

您可以sortedArrayUsingComparator:(NSComparator)cmptrNSArray reference)对数组进行排序。例如,如果要按name属性排序,请执行以下操作(假设您的类名为Person):

NSArray *sortedArray = [anArray sortedArrayUsingComparator:^(id a, id b) {
    NSString *first = [(Person *)a name];
    NSString *second = [(Person *)b name];
    return [first caseInsensitiveCompare:second];
}];