Симметричная разность двух массивов - PullRequest
3 голосов
/ 18 февраля 2010

У меня есть два NSArray объекта Кино, называемых DVD и VHS. Я хотел бы найти симметричную разницу этих массивов. Я хочу знать, какие фильмы покупаются в VHS, а не на DVD, а какие - на DVD, но не на VHS.

Может кто-нибудь сказать мне, есть ли быстрый алгоритм для его решения (желательно в C или Objective-C)? Это быстрее / легче решить, если я использую словари? Как называется эта проблема (или это просто «Симметричная разница»)?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 18 февраля 2010

Вы можете получить лучшие результаты, используя NSSet вместо NSArray, в зависимости от того, хотите ли вы разрешить дублирование в ваших списках.

NSSet дает вам такие методы, как intersectsSet:, которые должны дать вам то, что вам нужно.

Если вам нужна функциональность объединения, вы можете использовать NSMutableSet.

1 голос
/ 18 февраля 2010

Если вам нужны VHS минус DVD и DVD минус VHS в двух разных массивах, используйте -removeObjectsInArray:.

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

0 голосов
/ 18 февраля 2010

Попробуйте отсортировать оба массива, используя заголовок фильма (MergeSort), затем объедините оба из них и измените функцию объединения, чтобы она печатала уникальные необычные элементы.

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