0

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

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?我怎样才能维护协会?我也尝试过使用NSDictionarylike{resultId, titleDictionary}并将它们存储到一个数组中,但是我还没有找到一种有效的方法来删除具有相同的字典result,它们都太慢了。

有什么建议吗?

4

1 回答 1

2

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

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

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为从到NSMutableSet值的titlesArray映射NSMutableDictionaryresultIdindexDictionary

高温高压

于 2015-08-27T10:03:08.730 回答