Сравнение элементов NSMutableArray для значений - PullRequest
2 голосов
/ 14 июня 2011

Я ищу способ сравнить содержимое двух объектов NSMutableArray. Оба массива заполнены NSMutableDictionaries, которые были выделены отдельно, но иногда содержат одни и те же данные.

Упрощенный пример:

NSMutableArray *firstArray = [[NSMutableArray alloc] init];
NSMutableArray *secondArray = [[NSMutableArray alloc] init];

NSMutableDictionary *a = [[NSDictionary alloc] init];
[a setObject:@"foo" forKey:"name"];
[a setObject:[NSNumber numberWithInt:1] forKey:"number"];

NSMutableDictionary *b = [[NSDictionary alloc] init];
[b setObject:@"bar" forKey:"name"];
[b setObject:[NSNumber numberWithInt:2] forKey:"number"];

NSMutableDictionary *c = [[NSDictionary alloc] init];
[c setObject:@"foo" forKey:"name"];
[c setObject:[NSNumber numberWithInt:1] forKey:"number"];

[firstArray addObject:a];
[firstArray addObject:b];
[secondArray addObject:c];

a, b и c являются различными объектами, но содержимое a и c совпадает.

Мне нужна функция / подход для сравнения firstArray и secondArray и возврата только b.

В псевдокоде:

NSArray *difference = [self magicFunctionWithArray:firstArray andArray:secondArray];
NSLog(@"%@",difference)

=> ({name="bar"; number=2})

Заранее спасибо.

1 Ответ

6 голосов
/ 14 июня 2011

Этого можно достичь, используя NSMutableSet экземпляров.

NSMutableSet * firstSet = [NSMutableSet setWithArray:firstArray];
NSMutableSet * secondSet = [NSMutableSet setWithArray:firstArray];

[firstSet unionSet:[NSSet setWithArray:secondArray]];
[secondSet intersectSet:[NSSet setWithArray:secondArray]];

[firstSet minusSet:secondSet];

NSLog(@"%@", firstSet);
...