NSArray - проверить, есть ли объекты в массиве? - PullRequest
2 голосов
/ 16 февраля 2010

У меня есть 2 массива. Один представляет собой большую статическую группу из 600 объектов, а другой - небольшую изменяющуюся группу из 10 объектов.

Я хочу взять любые общие объекты между двумя группами и поместить их в новый массив.

Допустим, большая группа содержит 600 объектов с именами от 1 до 600. Меньшая группа содержит 9 объектов: 1, 2, 3, 4, 5, 6, a, b, c. Я хочу иметь возможность создать новый массив, который содержит объекты 1, 2, 3, 4, 5, 6.

Каков наилучший способ сделать это?

Ответы [ 3 ]

10 голосов
/ 16 февраля 2010

Вы уверены, что вам нужно NSArray с? Для пересечений было бы лучше использовать NSSet с. Для получения дополнительной информации об использовании NSArrays и NSSet, пожалуйста, обратитесь к Какао с любовью: NSArray или NSSet, NSDictionary или NSMapTable .

Если вы используете NSSet, вам нужно создать новый NSMutableSet, который имеет метод intersectSet:, который может использоваться для вашей цели:

NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", nil];
NSMutableSet *set2 = [[NSMutableSet alloc] initWithObjects:@"2", @"4", @"6", @"8", @"10", @"12", @"14", @"18", nil];

NSLog(@"set1: %@", set1);
NSLog(@"set2: %@", set2);
[set1 intersectSet:set2];
NSLog(@"isec: %@", set1);

Вы можете создать NSMutableSet из NSArray, используя метод addObjectsFromArray::

NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", nil];
NSMutableSet *set = [[NSMutableSet alloc] init];
[set addObjectsFromArray:array];

Возможно, вы также можете фильтровать NSArray с помощью метода filterUsingPredicate:, однако я никогда не работал с NSPredicate s, поэтому это только предположение.

5 голосов
/ 16 февраля 2010

Самый простой (но не обязательно самый быстрый (?)) Способ будет выглядеть примерно так:

NSMutableSet *intersection = [NSMutableSet setWithArray:smallArray];
[intersection intersectSet:[NSSet setWithArray:bigArray];
NSArray *result = [NSArray arrayWithSet:intersection];

Однако вам придется снова отсортировать полученный массив.

0 голосов
/ 26 марта 2011

Вы можете использовать NSPredicate. Я надеюсь, что этот пост будет полезен для начала ...

http://marcocattai.posterous.com/nsarray-nspredicate-filter

...