我有一个NSArray对象.
这些对象有一个名为“distance”的int属性.我想按距离排序我的阵列.
这些对象有一个名为“distance”的int属性.我想按距离排序我的阵列.
有人可以告诉我该怎么做?我无法理解sortUsingSelector或sortUsingDescriptor方法是如何工作的……
谢谢
解决方法
我假设您正在使用NSMutableArray,因为NSArray是不可变的.
排序时,您希望将最终结果排列为
x1 <= x2 <= x3 <= x4 <= ... <= xN
如何定义这个< =? ObjC有3种解决方案. 1. -sortUsingSelector: [arr sortUsingSelector:@selector(foo :)]意味着它的元素将被比较为*
x <= y is equivalent to [x foo:y] <= 0
例如,要对不区分大小写的字符串列表进行排序,请使用[arr sortUsingSelector:@selector(caseInsensitiveCompare :)].
2. -sortUsingFunction:context:
这与-sortUsingSelector:类似,但它使用函数指针作为输入. [arr sortUsingFunction:funcptr context:ctx]意味着它的元素将被比较为
x <= y is equivalent to funcptr(x,y,ctx) <= 0
3. -sortUsingDescriptors:
这是最复杂的一个.它需要一个NSSortDescriptors列表来描述属性的预期顺序.一个基本的例子:
NSSortDescriptor* desc = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES]; [arr sortUsingDescriptors:[NSArray arrayWithObject:desc]]; [desc release];
描述符告诉排序例程“按密钥距离按升序排序”.
假设有2个键,整数x升序然后字符串y降序,那么你可以写
NSSortDescriptor* dx = [[NSSortDescriptor alloc] initWithKey:@"x" ascending:YES]; NSSortDescriptor* dy = [[NSSortDescriptor alloc] initWithKey:@"y" ascending:NO selector:@selector(caseInsensitiveCompare:)]; [arr sortUsingDescriptors:[NSArray arrayWithObjects:x,nil]]; [dx release]; [dy release];
等等.
注意:*实际上你应该只返回-1,0或1.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。