2011-08-19 57 views
3

假設我有一個名爲arrayA -> {@"A", @"B", @"C", @"D", @"E"}的數組(NSArray)。我有另一個數組(NSArray),稱爲arrayB -> {@"D", @"E", @"F", @"G", @"H"}NSArray最有效的方法來做到這一點:

什麼是最有效的方式讓我得到兩個數組:1.一個數組是這兩個數組的子集,所以在這種情況下它將是{@「D」,@「E」}和一個子集在arrayB中是唯一的,所以{@「F」,@「G」,@「H」}。

,如果你看看這個VEN圖很簡單:http://theconsigliori.com/blog/wp-content/uploads/2009/09/venn-diagram.jpg

A和B是數組,我想2個陣列,1. A&B2. B-(A&B).

我使用的Objective-C /可可觸摸,但任何一般的想法是受歡迎的該陣列的長度大約爲6000個,我正在iPad上做這個。

謝謝!

+0

這不是一個iPad或Objective-C問題,而一個CS-基礎:

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

在arrayB中不存在在arrayA對象的子集問題,恕我直言。也許這可以幫助你然後:http://stackoverflow.com/questions/2406097/efficient-algorithm-to-find-a-maximum-common-subset-of-two-sets – Kheldar

回答

10

交叉口兩個陣列的:

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? 解決了蘋果效率的方式你的問題。應該夠了嗎?

+1

嗯,我嚴重質疑爲什麼我的intersectSet的答案,指出已經回答的問題,值得消極投票,稍後給出相同的答案沒有鏈接值得肯定... WTH。 – Kheldar

相關問題