Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C:高效地从大型数据结构中删除重复项_Ios_Objective C_Nsarray_Duplicate Removal_Nsorderedset - Fatal编程技术网

Ios 目标C:高效地从大型数据结构中删除重复项

Ios 目标C:高效地从大型数据结构中删除重复项,ios,objective-c,nsarray,duplicate-removal,nsorderedset,Ios,Objective C,Nsarray,Duplicate Removal,Nsorderedset,我有一个对象,其中包含一个NSNumbers(索引)数组和一个nsdictionary(索引)数组,对应于索引,包含一些信息。 我必须为每个object.index调用一个方法,并将object.indexTitles与返回的结果关联起来,将它们保存到单个数组中。 最后,我希望删除重复的索引,以有效的方式保留关联的indextitles,因为我使用的是大型数组 NSMutableArray *resultArray = [NSMutableArray array]; NSMutableArray

我有一个对象,其中包含一个
NSNumbers
索引
)数组和一个
nsdictionary
索引
)数组,对应于
索引,包含一些信息。
我必须为每个
object.index
调用一个方法,并将
object.indexTitles
与返回的结果关联起来,将它们保存到单个数组中。 最后,我希望删除重复的索引,以有效的方式保留关联的
indextitles
,因为我使用的是大型数组

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 *orderedSet = [NSOrderedSet orderedSetWithArray:resultArray];
resultArray = [orderedSet.array mutableCopy];
如何删除标题数组中的相应条目?我怎样才能保持这种联系? 我也尝试过使用
NSDictionary
{resultId,titleDictionary}
并将它们存储到一个数组中,但我没有找到一种有效的方法来删除具有相同
结果的字典,它们都太慢了


有什么建议吗?

我不完全清楚您的问题是什么,也许这会有帮助:

删除重复项的一个好方法不是首先添加它们,而是替换:

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

containsObject:
调用需要线性搜索,如果您的数据集很大,您可能希望将
resultArray
更改为
NSMutableSet
并将
titlesray
更改为
NSMutableDictionary
resultId
映射到
indexDictionary


HTH

使用
NSMutableSet
而不是
NSMutableArray
来消除重复项。您能用一些细节来扩展您的评论吗?谢谢@CRD,我正在尝试您的第二种解决方案,问题是NSMutableDictionary中的{resultId,indexDictionary}我正在获取indexDictionary的最后一个值,我需要第一个匹配项,如何处理它?已解决,我刚刚添加了if(![TitleDictionary objectForKey:resultId]),然后为键设置对象。
for(NSNumber *resultId in resultsIndexArray)
{
    // only add if resultId not already in resultArray
    if( ![resultArray containsObject:resultId] )
    {
        [titlesArray addObject:indexDictionary];
        [resultArray addObject:resultId];
    }
}