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