假设我有一个 Event 类,它有 2 个属性:action (NSString) 和 date (NSDate)。
假设我有一个 Event 对象数组。问题是“日期”属性可以匹配。
我需要删除重复项,这意味着具有相同日期的 2 个不同对象是重复项。
我可以删除任何字符串或 nsdate 数组中的重复项,它们很容易比较。但是如何处理复杂的对象,它们的属性要在哪里进行比较呢?
不要问我到目前为止我做了什么,因为我唯一想到的就是冒泡排序,但它是一个新手解决方案,而且速度很慢。
非常感谢任何帮助(链接,tuts,代码)。
提前致谢。
编辑
感谢dasblinkenlight,我做了一个自定义方法:
- (NSArray *)removeDuplicatesInArray:(NSArray*)arrayToFilter{
NSMutableSet *seenDates = [NSMutableSet set];
NSPredicate *dupDatesPred = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
YourClass *e = (YourClass*)obj;
BOOL seen = [seenDates containsObject:e.propertyName];
if (!seen) {
[seenDates addObject:e.when];
}
return !seen;
}];
return [arrayToFilter filteredArrayUsingPredicate:dupDatesPred];
}
这YourClass
是对象所属的类的名称,也是propertyName
您要比较的对象的属性。
假设 self.arrayWithObjects 包含 YourClass 的对象。
填充后,使用
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
你就完成了。
dasblinkenlight 的所有学分。干杯!