2011-03-21 9 views
3

任意の数のNSArrayオブジェクトを取得し、その配列のメンバーの可能なすべての完全な組み合わせのネストされた配列を返すメソッドを記述したいと考えています。ネストされたNSArray内のオブジェクトからの完全な2者グラフ

私はこの質問に答えるように言われたので、私はbipartite graph、より正確にはcomplete bipartite graphを作成しようとしています。

私は2つのアレイ持っていたのであれば、例えば、:

NSArray *nestedArray = [NSArray arrayWithObjects:a1, a2, nil]; 

、すべての可能な組み合わせの配列が返されました:

NSArray *a1 = [NSArray arrayWithObjects:@"Blue", @"Green", @"Yellow", nil]; 
NSArray *a2 = [NSArray arrayWithObjects:@"Apple", @"Orange", @"Pear", nil]; 

を私はそれらの配列の配列を取った方法を望みます、同じ長さの。これらの配列内のオブジェクトの数がサイズで育ったよう

[ 
     [@"Blue", @"Apple"], 
     [@"Blue", @"Orange"], 
     [@"Blue", @"Pear"], 
     [@"Green", @"Apple"], 
     [@"Green", @"Orange"], 
     [@"Green", @"Pear"], 
     [@"Yellow", @"Apple"], 
     [@"Yellow", @"Orange"], 
     [@"Yellow", @"Pear"] 
] 

、その結果の数は、指数関数的に私は信じています:だから、この例では、私は大体このように見えた配列をしたいと思います。私はおそらくこのメソッドをNSArrayのカテゴリにします。また、結果はすべて同じ長さにしたいと思います。つまり、3つのソース配列がある場合、メソッドによって返されるネストされた配列の長さはそれぞれ3でなければなりません。

これを行う最もエレガントな方法のアイデアですか?

+1

あなたはこれまで何をしていますか? – Anurag

+1

あなたが望むのは、組み合わせではなく、順列ではなく、配列のサイズが大きくなるにつれてその数が指数関数的に増加するのではなく、*配列の数が増加するためです。 –

+0

@larsmans、私はあなたのポイントを参照してください - 新しいタイトルが明確ですか? –

答えて

0

おそらく再帰的な解決策は良い解決策です。この関数は、最初の2つの配列の置換を見つけてから、1つの配列に結合すると、元の配列ではなく新しい結合配列でこの関数を再度呼び出します。

最終的に1つの配列しか残さず、最終的な結果配列になります。

1

すべての組み合わせではどういう意味ですか?なぜあなたは2つのリストが必要なすべての組み合わせが欲しいのですか?二部グラフが必要な場合は、質問を修正します。

+0

ありがとう、ありがとう、ありがとう!私はそれを何と呼ぶべきか分かりませんでした... –

+0

確かなこと...私はそれを持っていれば解決策を投稿します。 –

+0

upvotesのために懇願をやめてください。あなたの答えがアップヴォートに値するなら、それを得るでしょう。それらを求めることはちょうど騒音であり、本当に悪く見えます。 –