可可 – 对NSArray进行排序

我有一个NSArray对象.
这些对象有一个名为“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.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...