ios - Objective-C:从大型数据结构中有效地删除重复项

标签 ios objective-c nsarray duplicates nsorderedset

我有一个包含 NSNumbers 数组(indexes)和 NSDictionaries 数组(indexesTitles ) 对应于 indexes,包含一些信息。 我必须为每个 object.index 调用一个方法并将 object.indexTitles 关联到返回结果,将它们保存到一个数组中。 最后,我想删除重复的索引,以一种有效的方式保留关联的 indextTitles,因为我正在处理大型数组。

NSMutableArray *resultArray = [NSMutableArray array];
NSMutableArray *titlesArray = [NSMutableArray array];
for(NSNumber *index in object.indexes)
{
    NSArray *resultsIndexArray = [self methodThatReturnsAnArray];
    NSString *indexTitleDictionary = [object.indexesTitles objectAtIndex:i];
    for(NSNumber *resultId in resultsIndexArray)
    {
        [titlesArray addObject:indexDictionary];
        [resultArray addObject:resultId];
    }
    i++;
}
[fullResultsArray addObject:titlesArray];
[fullResultsArray addObject:resultArray];

我发现删除重复项最有效的方法是使用
像这样的 NSOrderedSet:

NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:resultArray];
resultArray = [orderedSet.array mutableCopy];

如何删除 titlesArray 中的相应条目?我怎样才能保持协会? 我还尝试使用 NSDictionary 之类的 {resultId, titleDictionary} 并将它们存储到一个数组中,但我还没有找到一种有效的方法来删除字典同样的结果,它们都太慢了。

有什么建议吗?

最佳答案

我不太清楚你的问题是什么,也许这会有所帮助:

删除重复项的一个好方法是一开始就不要添加它们,替换为:

for(NSNumber *resultId in resultsIndexArray)
{
    [titlesArray addObject:indexDictionary];
    [resultArray addObject:resultId];
}

与:

for(NSNumber *resultId in resultsIndexArray)
{
    // only add if resultId not already in resultArray
    if( ![resultArray containsObject:resultId] )
    {
        [titlesArray addObject:indexDictionary];
        [resultArray addObject:resultId];
    }
}

containsObject: 调用需要线性搜索,如果您的数据集很大,您可能希望将 resultArray 更改为 NSMutableSettitlesArrayNSMutableDictionaryresultIdindexDictionary 值的映射。

HTH

关于ios - Objective-C:从大型数据结构中有效地删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32245647/

相关文章:

objective-c - 如何从 NSArray 获取特定长度的字符串?

iphone - 扭转一个 NSArray 的烦恼?

iphone - Airplay、Apple TV 和 Remote Events - 是否仅适用于流式音频/视频?

ios - 如何在特定日期触发下载

ios - 平移 - 平移之前图像的初始位置

ios - 获取 UITableView 中最后一行的索引路径

ios - 分组 TableView - 了解选择了哪个单元格

ios - 找不到 iTunesMobileDevice.dll

objective-c - 如何/是否模拟 UINavigationController pushToViewController 方法

ios - 登录和注销捕获基于 ios 中的位置