2011-08-19 19 views
3

私はarrayA -> {@"A", @"B", @"C", @"D", @"E"}と呼ばれる配列(NSArray)を持っているとしましょう。そして私はarrayB -> {@"D", @"E", @"F", @"G", @"H"}と呼ばれる別の配列(NSArray)を持っています。NSArrayこれを行う最も効果的な方法:

私は2つの配列を得るのに最も効率的な方法は何ですか?1.両方のサブセットである配列なので、この場合は{@ "D"、@ "E"}となるサブセットです。配列Bでは一意であるため、{@ "F"、@ "G"、@ "H"}です。

それはあなたがこのVEN図を見れば簡単です:http://theconsigliori.com/blog/wp-content/uploads/2009/09/venn-diagram.jpg

AとBが配列されている、私はObjective-Cの/ココアタッチを使用しています2つの配列、1. A&B2. B-(A&B).

を取得したいのですが、どんな一般的な考えも歓迎です。配列は約6000要素になるだろうし、私はiPadでこれをやっている。

ありがとうございます!

+0

それはむしろiPadやObjective-Cの質問、CS-基本ではありません質問、イホ。たぶん、これはあなたを助けることができます:http://stackoverflow.com/questions/2406097/efficient-algorithm-to-find-a-maximum-common-subset-of-two-sets – Kheldar

答えて

10

2つの配列の交差点:arrayAには存在しないarrayB内のオブジェクトの

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

サブセット:

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の答えは、否定的な投票の価値があります。 – Kheldar

関連する問題