Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 按业务密钥快速排序到订单数组?_Objective C_Cocoa_Arrays_Sorting_Quicksort - Fatal编程技术网

Objective c 按业务密钥快速排序到订单数组?

Objective c 按业务密钥快速排序到订单数组?,objective-c,cocoa,arrays,sorting,quicksort,Objective C,Cocoa,Arrays,Sorting,Quicksort,我有一系列的物体,我无法预测它们的大小。数组的内容是具有nsstring和nsnumber类型属性的模型对象 我需要根据一个属性(nsnumber)对数组进行排序。在objective-c/Cocoa中,您将如何实现这一目标?实现快速排序或其他算法(哪一种)?有没有图书馆可以帮你处理这个问题 更新 虽然下面的回答是正确的,但它只适用于10.6,我的目标是10.5。使用stdlib.h的qsort()。NSArray有排序方法。给定阵列,arr NSSortDescriptor *sortDesc

我有一系列的物体,我无法预测它们的大小。数组的内容是具有nsstring和nsnumber类型属性的模型对象

我需要根据一个属性(nsnumber)对数组进行排序。在objective-c/Cocoa中,您将如何实现这一目标?实现快速排序或其他算法(哪一种)?有没有图书馆可以帮你处理这个问题

更新 虽然下面的回答是正确的,但它只适用于10.6,我的目标是10.5。

使用stdlib.h的
qsort()

NSArray
有排序方法。给定阵列,
arr

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"numberProperty" ascending:YES];
NSArray *sortedArr = [arr sortedArrayUsingSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
将给您一个按@“numberProperty”排序(升序)的数组。显然,您必须将模型对象中的
NSNumber
属性的名称替换为
@“numberProperty”


排序算法没有在
NSArray
的排序方法中指定。

这就是我想到的:

NSArray *unsortedArray = [results allValues];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] 
                    initWithKey:@"ordinalPosition" 
                      ascending:YES] 
                    autorelease];

NSArray *sortedArray = [unsortedArray 
                       sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

如果提问者使用的是
NSArray
,则stdlib的
qsort()
不会有多大帮助。我要补充的是,内置排序几乎总是比手工实现的任何排序都更有效。在有确凿证据表明内置排序会变慢之前,您甚至不应该考虑编写自定义排序。+1:排序和筛选NSArray对象:仅在10.6版中可用,我正在开发至少10.5版。抱歉没有在我的帖子上提及。什么?上述方法均不需要10.6。排序是多年来基础的一部分。也许你会参考NoSeRebug描述符的便利工厂方法,WHIHC到10.6?只需将其替换为等效的alloc/initWithKey:升序:/autorelease。