任何人都可以提供一个如何按日期对数组进行排序的示例吗?

时间:2014-10-18 00:55:10

标签: objective-c eventkit

我有一个数组存储通过谓词获取的事件;我想按日期排序。我读到我必须“在数组上调用sortedArrayUsingSelector:为compareStartDateWithEvent:方法提供选择器”,但我不知道如何使用它。有人可以给我一个例子吗?

这是我的数组:NSArray *events = [store eventsMatchingPredicate:predicate] 谢谢!

1 个答案:

答案 0 :(得分:1)

获得阵列后,请考虑:

NSArray *sortedArray = [events sortedArrayUsingComparator:^NSComparisonResult(EKEvent *event1, EKEvent *event2) {
    return [event1.startDate compare:event2.startDate];
}];

这将使用内置的NSDate - compare函数按开始日期对事件进行排序。

- sortedArrayUsingComparator方法采用NSComparator块,定义为:

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);

您基本上可以将其视为一个带有两个参数的块(lambda函数),并返回一个NSComparisonResult成员,该成员解释了两个给定对象的排序。对象的类型取决于您推入数组的内容,在本例中为EKEvent s。你如何对它们进行排序取决于你;阅读NSComparator了解更多信息和规则。 NSArray会多次调用您的块,每次都会显示两个项目,直到对数组进行排序。

现在,幸运的是,EKEvent公开了一个知道如何与EKEvents进行比较的选择器。 NSArray有另一种方法,sortedArrayUsingSelector:可供您使用,只需告诉它使用EKEvent公开的比较选择器:

NSArray *sortedArray = [events sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)];

现在NSArray每次想要比较两个项目时都会调用- compareStartDateWithEvent:。如果这是您想要的订单,您可以使用它。否则,请使用上面的比较器方法。