按对象方法的结果对 NSArray 进行排序

Posted

技术标签:

【中文标题】按对象方法的结果对 NSArray 进行排序【英文标题】:Sort NSArray by the results of the object's method 【发布时间】:2012-06-14 13:48:23 【问题描述】:

所以我有一个带有自定义对象的 NSArray,称为 Church。每个教堂都有一系列的弥撒时间。所以教堂里有一种方法可以计算最接近用户当前时间的质量。

-(NSDate *)closestTimeTo:(NSDate *)currentTime

我希望能够通过该方法为每个对象返回的结果(即 NSDate)对 Church 的 NSArray 进行排序。基本上是为了得到一个按最近时间和位置排序的质量列表。

我正在使用类别,并且由于它是核心数据对象,因此无法将最接近的时间存储为属性。我也不认为将这些值保存到核心数据中不是一个好主意,因为这些方法会因为位置服务而不断被调用。

关于如何使用其对象方法的结果对此类数组进行排序有什么想法吗?

【问题讨论】:

【参考方案1】:

试试下面的块。它会直接帮助(或至少稍作修改)。

NSArray *sortedArray;
sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) 
    NSDate *first = [(Church*)a closestTimeTo:currentTime];
    NSDate *second = [(Church*)b closestTimeTo:currentTime];
    return [first compare:second];
];

【讨论】:

【参考方案2】:

在您的类中创建一个新方法,该方法采用另一个 Church 类并返回 NSOrderedSameNSOrderedAscendingNSOrderedDescending,具体取决于您希望该对象是第一个还是最后一个。使用您的closestTimeTo 方法找出答案。然后将NSArraysortedArrayUsingSelector 调用与您的方法一起使用。

【讨论】:

听起来很有趣,我得试试这些类型

以上是关于按对象方法的结果对 NSArray 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按 2 级深的键值关系对 NSArray 进行排序

对包含 NSNumber 变量的 NSobjects 的 NSArray 进行排序

nsdictionary 上的排序给出的结果与 nsarray 上的排序不同

按二维排序 NSArray - Objective-C

今天按 NSDate 对 NSArray 进行排序

根据对另一个 NSArray 字符串的排序,对自定义对象的 NSArray 进行排序