如何基于多个属性和非属性(方法)对NSMutableArray进行排序

时间:2013-05-23 23:36:00

标签: ios objective-c sorting nsarray nssortdescriptor

我遇到了sort NSArray个自定义对象的问题。 NSArray必须通过返回int value(因此它不是对象的属性)的方法以及属于该对象的属性进行排序。

假设我的array包含NSArray PolygonObject。每个PolygonObject都有很多属性,其中一个是'height'。除此之外,我想通过计算每个多边形的面积来sort array。所以我希望sort array'area'(使用计算区域的方法)和height(对象的简单属性)。

我知道如何使用方法(NSArraysortedArrayUsingComparator ...)和使用密钥(sortedArrayUsingSelector)对NSSortDescriptor进行排序,但我不知道关于如何sort使用它们。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

使用sortedArrayUsingDescriptors:并传递一个包含2个排序描述符的数组。第一个将进行主要排序,第二个将完成初级排序。排序描述符可以使用sortDescriptorWithKey创建:升序:比较器:允许您编写自己的比较器来计算区域。

答案 1 :(得分:1)

我会在你设置多边形参数时重新计算区域,然后在每次将多边形对象与另一个对象进行比较时使用排序而不是调用区域方法来重新计算区域,但这取决于你。

您可能需要查看How to sort NSMutableArray using sortedArrayUsingDescriptors,其中包含排序示例。

特别是使用2个NSSortDescriptors查看部件。

基本上,您为要对其排序的每个参数创建一个排序描述符,然后将它们放入数组并使用该数组进行排序。如果我没有弄错字段,你只需将字段名称作为字符串提供(参见链接的答案)。

答案 2 :(得分:1)

NSArray公开了“sortUsingDescriptors”方法。此方法可以使用键数组并生成排序数组。

我会生成多个排序描述符并将它们添加到数组中。将此数组与sortUsingDescriptors方法一起使用

参考:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/instm/NSArray/sortedArrayUsingDescriptors