如何合并两个NSArray

时间:2013-02-19 10:31:52

标签: iphone ios objective-c algorithm ipad

我知道如何合并包含一些重复的两个数组: 这是一个例子来说明我想做的事情:

// Here is some dictionary which contain an unique "id" key.
NSDictionary *dico1 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"11111111", @"id", nil];
NSDictionary *dico2 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"22222222", @"id", nil];
NSDictionary *dico3 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"33333333", @"id", nil];
NSDictionary *dico4 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"44444444", @"id", nil];
NSDictionary *dico5 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"55555555", @"id", nil];

// And here is duplicates of the 2nd and 3td dictionary.
NSDictionary *dico2_bis = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"22222222", @"id", nil];
NSDictionary *dico3_bis = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"33333333", @"id", nil];

现在我有一个包含其中一些词典的数组:

NSArray *currentArray = [NSArray arrayWithObjects:
                         dico1, dico2, dico3, nil];

这是要与第一个合并的新数组,其中包含一些重复的和新的“数据”:

NSArray *tempArray = [NSArray arrayWithObjects:
                      dico2_bis, dico3_bis, dico4, dico5, nil];

我的目标,在最后阶段,是有一个数组,其中包含所有重复删除的词典

NSArray *finalArray = [NSArray arrayWithObjects:
                       dico1, dico2, dico3, dico4, dico5, nil];


我不知道什么是最有效的解决方案,合并必须要快。我是否必须实现快速枚举或基于块的枚举算法,或者可能是NSPredicate实现? 我已经搜索了NSPredicate,但是我找不到用其他数组过滤数组的方法= /
任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

你不使用NSArrays,你需要的是一个自动消除“重复”的集合(“doubloon”是西班牙金币)。因此,您只使用NSMutableSet并将NSDictionaries添加到其中。

NSMutableSet aSet = [NSMutableSet new];
[aSet addObject:dico1];
....

答案 1 :(得分:1)

试试这个。

NSArray *hasDuplicates = [NSArray arrayWithObjects:@"first", @"second", @"first", nil];
NSArray *noDuplicates = [[NSSet setWithArray: hasDuplicates] allObjects];

NSLog(@"%@ %@",hasDuplicates,noDuplicates);

答案 2 :(得分:0)

您可以使用NSMutableSet代替NSArray。 NSSet类有一个方法,如* - (void)setSet:(NSSet )otherSet 。 NSSet(和NSMutableSet)正在测试是否有双重对象。