gpt4 book ai didi

iphone - 从数组中删除重复项,比较其对象的属性

转载 作者:太空狗 更新时间:2023-10-30 03:15:35 25 4
gpt4 key购买 nike

假设我有一个 Event 类,它有 2 个属性:action (NSString) 和 date (NSDate)。

假设我有一个事件对象数组。问题是“日期”属性可以匹配。

我需要删除重复项,这意味着具有相同日期的 2 个不同对象是重复项。

我可以删除任何字符串数组或 nsdates 中的重复项,它们很容易比较。但是如何处理复杂的对象,比较它们的属性呢?

不要问我到目前为止我做了什么,因为我唯一想到的是冒泡排序,但这是一个新手解决方案,而且很慢

非常感谢任何帮助(链接、教程、代码)。

提前致谢。

编辑

感谢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。干杯!

最佳答案

您可以创建日期的 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];

关于iphone - 从数组中删除重复项,比较其对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13499231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com