Joh*_*ith 17 sorting iphone objective-c duplicates duplicate-removal
假设我有一个类Event,它有2个属性:action(NSString)和date(NSDate).
假设我有一个Event对象数组.问题是"日期"属性可以匹配.
我需要删除重复项,这意味着具有相同日期的2个不同对象是重复的.
我可以删除任何字符串或nsdates数组中的重复项,它们很容易比较.但是如何使用复杂对象来处理它们的属性呢?
不要问我到目前为止我做了什么,因为我脑子里唯一想到的就是冒泡,但这是一个新手解决方案,而且很慢.
非常感谢任何帮助(链接,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];
}
Run Code Online (Sandbox Code Playgroud)
这YourClass是对象所属类的名称,并且propertyName是要比较的对象的属性.
假设self.arrayWithObjects包含YourClass的对象.
填充后,使用
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
你完成了
所有信用到dasblinkenlight.干杯!
das*_*ght 25
您可以创建NSMutableSet日期,迭代事件列表,并仅向事件添加您之前未遇到的日期.
NSMutableSet *seenDates = [NSMutableSet set];
NSPredicate *dupDatesPred = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
Event *e = (Event*)obj;
BOOL seen = [seenDates containsObject:e.date];
if (!seen) {
[seenDates addObject:e.date];
}
return !seen;
}];
NSArray *events = ... // This is your array which needs to be filtered
NSArray *filtered = [events filteredArrayUsingPredicate:dupDatesPred];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6937 次 |
| 最近记录: |