按对象方法的结果对 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 类并返回 NSOrderedSame
、NSOrderedAscending
或 NSOrderedDescending
,具体取决于您希望该对象是第一个还是最后一个。使用您的closestTimeTo
方法找出答案。然后将NSArray
的sortedArrayUsingSelector
调用与您的方法一起使用。
【讨论】:
听起来很有趣,我得试试这些类型以上是关于按对象方法的结果对 NSArray 进行排序的主要内容,如果未能解决你的问题,请参考以下文章
对包含 NSNumber 变量的 NSobjects 的 NSArray 进行排序