3

任意の数の NSArray オブジェクトを受け取り、その配列のメンバーのすべての可能な完全な組み合わせのネストされた配列を返すメソッドを作成しようとしています。

この質問への回答で言われたように、2 部グラフ、より正確には完全な 2 部グラフを作成しようとしています。

たとえば、2 つの配列があるとします。

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

これらの配列の配列を取るメソッドが必要です。

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

同じ長さのすべての可能な組み合わせの配列を返しました。したがって、この例では、大まかに次のような配列が必要です。

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

これらの配列内のオブジェクトの数が増えるにつれて、結果の数も指数関数的に増加すると思います。おそらく、このメソッドを NSArray のカテゴリにするでしょう。また、結果がすべて同じ長さになるようにしたいと思います。つまり、ソース配列が 3 つある場合、メソッドによって返されるネストされた各配列の長さは 3 でなければなりません。

これを行うための最もエレガントな方法のアイデアはありますか?

4

2 に答える 2

1

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

于 2011-03-21T14:19:24.943 に答える
0

再帰的な解決策はおそらく良い解決策です。この関数は最初の 2 つの配列の順列のみを検索し、結合して 1 つの配列にした後、元の配列ではなく、結合された新しい配列を使用してこの関数を再度呼び出します。

最終的には 1 つの配列しか残らず、それが最終的な結果の配列になります。

于 2011-03-21T01:28:08.850 に答える