Несколько NSArray и общие объекты - PullRequest
1 голос
/ 10 апреля 2011

Итак, у меня есть несколько NSArrays (на самом деле 5), и я хотел бы создать новый NSArray, содержащий только объекты, общие для ВСЕХ массивов.Есть ли эффективный способ сделать это.Единственный способ, о котором я могу подумать, - это просмотреть все массивы, сравнивая каждый объект.

Ответы [ 2 ]

3 голосов
/ 22 июля 2015

Я закончил тем, что использовал это, которое работает довольно хорошо:

NSMutableSet *set = [NSMutableSet setWithArray:array];
NSMutableSet *set1 = [NSMutableSet setWithArray:array2];
NSMutableSet *set2 = [NSMutableSet setWithArray:array3];
NSMutableSet *set3 = [NSMutableSet setWithArray:array4];
NSMutableSet *set4 = [NSMutableSet setWithArray:array5];

[set intersectSet:set1];
[set intersectSet:set2];
[set intersectSet:set3];
[set intersectSet:set4];

NSArray *allArray = [set allObjects];
3 голосов
/ 10 апреля 2011

Почему бы не создать NSSet (на самом деле NSMutableSet), сбросить в него содержимое всех 5 массивов и затем создать новый массив NSArray из NSSet?

Извините, я неправильно прочитал ваш вопрос. Да, я думаю, что вам нужно пройтись по каждой из них, чтобы найти дубликаты. Но это не так страшно для реализации (может быть несколько медленным во время выполнения, если ваши массивы огромны).

Вот пример кода:

- (void) filterSet: (NSMutableSet*)set withArray: (NSArray*) array {
    NSMutableSet* removals = [NSMutableSet setWithCapacity:[array count]];
    for (id obj in set) {
        if (! [array containsObject: obj]) {
            [removals addObject: obj];
        }
    }
    [set minusSet: removals];
}

NSMutableSet* mySet = [NSMutableSet setWithCapacity:[array1 count] * 5];
[mySet addObjectsFromArray: array1];
[self filterSet: mySet withArray: array2];
[self filterSet: mySet withArray: array3];
[self filterSet: mySet withArray: array4];
[self filterSet: mySet withArray: array5];

NSArray* filteredArray = [mySet allObjects];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...