从NSMutable Array中删除重复的自定义对象,确保保留最新的重复对象

时间:2016-05-12 21:23:10

标签: ios objective-c nsarray nsset

我有NSMutableArray个自定义对象。每个都包含唯一的ID字符串,每个字符串都包含downloadedDate属性。

对象可能会被添加两次,所以我需要检查重复项的ID,如果我发现重复,我需要保留具有最新日期的那个。

目前我正在执行以下操作来删除重复项,但它没有考虑将对象保留为最新日期。

NSArray *originalArray = [NSArray arrayWithArray:mutableItems];
NSMutableArray *uniqueArray = [NSMutableArray array];
NSMutableSet *names = [NSMutableSet set];
for (ZSSObject *g in originalArray) {
    NSString *destinationName = g.code;
    if (![names containsObject:destinationName]) {
        [uniqueArray addObject:g];
        [names addObject:destinationName];
    }
}
NSArray *uniqueObjects = uniqueArray;

对象的创建方式如下:

ZSSObject *obj = [ZSSObject alloc] init];
obj.code = @"12345";
obj.downloadedDate = [NSDate date];

除了拥有一堆数组和嵌套循环之外,还有一种更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

使用建议代替使用NSDictionary,我想出了这个解决方案:

NSMutableDictionary *objDict = [[NSMutableDictionary alloc] init];
for (ZSSObject *g in mutableItems) {

    ZSSObject *addedObj = objDict[g.code];

    if (addedObj) {

        // Compare dates
        if ([addedObj respondsToSelector:@selector(dateDownloaded)]) {

            if ([g.dateDownloaded compare:addedObj.dateDownloaded] == NSOrderedDescending) {

                [objDict setObject:g forKey:g.code];

            }

        }

    } else {
        [objDict setObject:g forKey:g.code];
    }
}

NSArray *uniqueObj = objDict.allValues;