2011-08-19 3 views
3

Предположим, у меня есть массив (NSArray), который называется arrayA -> {@"A", @"B", @"C", @"D", @"E"}. И у меня есть другой массив (NSArray), который называется arrayB -> {@"D", @"E", @"F", @"G", @"H"}.NSArray наиболее эффективный способ сделать это:

Самый эффективный способ получить два массива: 1. Массив, который является подмножеством обоих из них, поэтому в этом случае это будут {@ "D", @ "E"} и подмножество, которое является уникальным в массиве B, поэтому {@ "F", @ "G", @ "H"}.

Это проще, если вы посмотрите на эту VEN схеме: http://theconsigliori.com/blog/wp-content/uploads/2009/09/venn-diagram.jpg

А и В являются массивы, я хочу, чтобы получить 2 массивы, 1. A&B2. B-(A&B).

Я использую Objective-C/какао касание, но любая общая идея приветствуется. Массив будет составлять приблизительно 6000 элементов, и я делаю это на iPad.

Спасибо!

+0

Это не IPad или Objective-C вопрос, скорее CS-основы вопрос, imho. Возможно, вам это поможет: http://stackoverflow.com/questions/2406097/efficient-algorithm-to-find-a-maximum-common-subset-of-two-sets – Kheldar

ответ

10

Пересечение двух массивов:

NSMutableSet *intersectionDict = [NSMutableSet setWithArray:arrayA]; 
[intersectionDict intersectSet:[NSSet setWithArray:arrayB]]; 
NSArray *intersectionArray = [intersectionDict allObjects]; 

Подмножество объектов в arrayB, которые не присутствуют в Arraya:

NSMutableArray *arrayC = [NSMutableArray arrayWithArray:arrayB]; 
[arrayC removeObjectsInArray:arrayA]; 
+0

+1 хотя это не будет сохранять порядок. –

+0

@Dave DeLong Согласен. Хотя я не уверен, что в этом случае порядок имеет значение. Во всяком случае, стоит упомянуть. – albertamg

+0

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

0

Метод intersectSet, как указано в этом сообщении:

NSArray - check if objects are in an array? решает вашу проблему в пути Apple и эффективности. Должно быть достаточно?

+1

Ну, я серьезно сомневаюсь, почему мой intersectSet ответ, указывая на уже ответивший вопрос, стоит отрицательных голосов, когда один и тот же ответ, приведенный чуть позже без ссылки, стоит положительных ... WTH. – Kheldar

Смежные вопросы