2

重複を含む2つの配列をマージする方法を知っています:これが私がやりたいことを説明するための例です:

// 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についてはすでに検索しましたが、他の配列で配列をフィルタリングする方法が見つかりません=/
助けていただければ幸いです。

4

3 に答える 3

3

NSArrays は使用しません。必要なのは、「重複」を自動的に排除するセットです (「ダブロン」はスペインの金貨です)。したがって、単純に NSMutableSet を使用して、それに NSDictionaries を追加します。

NSMutableSet aSet = [NSMutableSet new];
[aSet addObject:dico1];
....
于 2013-02-19T10:42:59.377 に答える
1

これを試して。

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

NSLog(@"%@ %@",hasDuplicates,noDuplicates);
于 2013-02-19T10:51:36.957 に答える
0

NSArrayの代わりにNSMutableSetを使用できます。NSSetクラスには、*-(void)setSet:(NSSet )otherSetのようなメソッドがあります。NSSet(およびNSMutableSet)は、オブジェクトが2つあるかどうかをテストしています。

于 2013-02-19T10:49:52.030 に答える