假设我有一个名为Event的类,它有两个属性:action(NSString)和date(NSDate)。
假设我有一个Event对象的数组。问题在于“date”属性可能相同。
我需要删除重复项,也就是说,具有相同日期的两个不同对象是重复的。
我可以从任何字符串或NSDate数组中删除重复项,它们很容易比较。但如何处理复杂对象,其中它们的属性要进行比较?
不要问我到目前为止做了什么,因为我想到的唯一一件事是冒泡排序,但这是一个新手解决方案,并且很慢。
非常感谢任何帮助(链接、教程、代码)。
提前致谢。
编辑
感谢dasblinkenlight的帮助,我已经创建了一个自定义方法:
假设我有一个Event对象的数组。问题在于“date”属性可能相同。
我需要删除重复项,也就是说,具有相同日期的两个不同对象是重复的。
我可以从任何字符串或NSDate数组中删除重复项,它们很容易比较。但如何处理复杂对象,其中它们的属性要进行比较?
不要问我到目前为止做了什么,因为我想到的唯一一件事是冒泡排序,但这是一个新手解决方案,并且很慢。
非常感谢任何帮助(链接、教程、代码)。
提前致谢。
编辑
感谢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 所有。谢谢!