从 NSArray 中删除同一天的 NSDate

Removing NSDate's with same day from NSArray

我正在努力想出最好/最干净的方法来做到这一点。

基本上我有一个 NSDates 数组,我正在尝试获取 UITableView 委托方法 (numberOfSectionsInTableView) return 数组中不相同的日期数。

这是另一个例子:

我的数组:

NSDate *1 (Monday 1st Jan)
NSDate *2 (Monday 1st Jan)
NSDate *3 (Tuesday 2nd Jan)
NSDate *4 (Wednesday 3rd Jan)
NSDate *5 (Wednesday 3rd Jan)

我想要的数组:

NSDate *1 (Monday 1st Jan)
NSDate *2 (Tuesday 2nd Jan)
NSDate *3 (Wednesday 3rd Jan)

可能最简单的解决方案是将日期数组传递到一个集合中,然后再传递到一个数组中,但您松散了排序。
根据定义 NSSet 只能包含一个相等实例。

NSSet *set = [NSSet setWithArray: datesArray];

通过对每个元素之一调用 isEqual 可以保证您不会有重复的日期。 NSDate 中的 isEqual 调用 isEqualToDate 仅当实例表示相同日期时才考虑相等。
那么:

NSArray * newdates = set.allObjects

值得一提的是,在 NSArray 上你还可以使用 KVC 来创建不同的联合:

NSArray * uniqueDates = [datesArray valueForKeyPath:@"@distinctUnionOfObjects.self"];