自定义类上的sortedArrayUsingSelector?

时间:2011-06-02 16:42:36

标签: iphone nsmutablearray

我有一个NSMutableArray,里面有自定义对象。每个对象都有一个name属性。有没有办法使用

[myArray    sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]
不知怎的,在名字上?像

[myArray.name sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]

或者我最好为自定义类编写排序函数以按名称排序?感谢。

3 个答案:

答案 0 :(得分:11)

在这种情况下,您需要使用NSSortDescriptor

NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray* sortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

答案 1 :(得分:4)

有几种方法可以实现这一点,一种是定义自己的比较方法,正如其他人所建议的那样,但如果它只是一次性的事情,你也可以使用新的NSComparator API来使用一个分类块:

NSArray *sortedArray = [array sortedArrayUsingComparator:^(id obj1, id obj2) {
    return [[(MyClass *)obj1 name] caseInsensitiveCompare:[(MyClass *)obj2 name]];
}];

答案 2 :(得分:0)

我认为这个答案正是你要找的。

How to sort an NSMutableArray with custom objects in it?