我有一个NSMutableArray,里面有自定义对象。每个对象都有一个name属性。有没有办法使用
[myArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]
不知怎的,在名字上?像
[myArray.name sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]
或者我最好为自定义类编写排序函数以按名称排序?感谢。
答案 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)
我认为这个答案正是你要找的。 p>