【问题标题】:How to sort an NSMutableArray based on multiple attributes and non-attributes (methods)如何根据多个属性和非属性(方法)对 NSMutableArray 进行排序
【发布时间】:2013-05-19 12:02:53
【问题描述】:

我对@9​​87654321@ 和NSArray 的自定义对象有疑问。 NSArray 必须按返回 int value 的方法(因此它不是对象的属性)和属于该对象的属性进行排序。

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

我知道如何使用方法(sortedArrayUsingComparatorsortedArrayUsingSelector...)和键(NSSortDescriptor)对NSArray 进行排序,但我不知道如何使用sort两者都有。

我该怎么做?

【问题讨论】:

    标签: ios objective-c sorting nsarray nssortdescriptor


    【解决方案1】:

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

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

    特别看一下使用2个NSSortDescriptors的部分。

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

    【讨论】:

      【解决方案2】:

      使用 sortedArrayUsingDescriptors: 并传递一个包含 2 个排序描述符的数组。第一个将进行主要排序,第二个将对其进行细化。可以使用 sortDescriptorWithKey:ascending:comparator: 创建排序描述符,以允许您编写自己的比较器来计算面积。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-05-17
          • 1970-01-01
          • 1970-01-01
          • 2017-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多