Управление двумя массивами - PullRequest
2 голосов
/ 14 октября 2011

У меня есть два массива:

NSMutableArray *web = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableArray *disk = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",nil];

После сравнения двух массивов я хочу создать один массив с именем remArray, который содержит объекты, которые существуют в массиве дисков, но отсутствуют в веб-массиве (строка "1 "в этом случае).

Затем я хочу создать один массив с именем addArray, который содержит объекты, которые существуют в веб-массиве, но отсутствуют в массиве дисков (в данном случае строка" 4 ").

Есть ли простой способ сделать это без особых накладных расходов?

Ответы [ 3 ]

5 голосов
/ 14 октября 2011

Лучше, чем NSArray, вы можете использовать NSSet

С NSMutableSet вы можете удалить объект из другого набора:

- (void)minusSet:(NSSet *)otherSet

Ваш код может быть:

NSMutableSet *web = [[NSMutableSet alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableSet *disk = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",nil];

NSMutableSet * remArray = [[NSMutableSet setWithSet:disk] minusSet:web];
NSMutableSet * addArray = [[NSMutableSet setWithSet:web] minusSet:disk];

Вы также можете прочитать руководство Темы программирования коллекций .Перед использованием массива вы должны определить, хотите ли вы упорядоченную коллекцию или нет.

2 голосов
/ 14 октября 2011

Вы можете использовать метод removeObjectsInArray:

NSMutableArray * remArray = [NSMutableArray arrayWithArray:disk];
[remArray removeObjectsInArray:web];

Сделайте то же самое, переключая диск и сеть, чтобы получить addArray.

1 голос
/ 14 октября 2011

Я не знаю ни одного по-настоящему легкого пути, но накатить ваш «разностный» метод не так уж и сложно.

Должно работать что-то вроде следующего:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...