複数のセットを扱う場合、一般的な操作はデカルト積を計算し、可能なすべてを含むセットを生成します。入力セットからの要素の組み合わせ。 Java でこれを容易にするために、任意の数のセットを処理するソリューションを検討してみましょう。
デカルト積の再帰的アプローチ
次の再帰的な Java メソッドである cartesianProduct は、次の計算を行います。任意の数の集合のデカルト積:
public static Set<Set<Object>> cartesianProduct(Set<?>... sets) { if (sets.length < 2) throw new IllegalArgumentException("Can't have a product of fewer than two sets (got " + sets.length + ")"); return _cartesianProduct(0, sets); }
再帰ヘルパー メソッド _cartesianProduct は、各セットの要素を累積セットに繰り返し追加することによってデカルト積を構築します。
private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) { Set<Set<Object>> ret = new HashSet<Set<Object>>(); if (index == sets.length) { ret.add(new HashSet<Object>()); } else { for (Object obj : sets[index]) { for (Set<Object> set : _cartesianProduct(index + 1, sets)) { set.add(obj); ret.add(set); } } } return ret; }
使用例
の使用法を示します。このメソッドでは、質問に示されている例を考えてみましょう。ここには、クラス person、 Gift、および GiftExtension のオブジェクトを含む 3 つのセットがあります。これらのセットのデカルト積は次のように取得できます。
Set<Person> persons = ...; Set<Gift> gifts = ...; Set<GiftExtension> giftExtensions = ...; Set<Set<Object>> cartesianProduct = cartesianProduct(persons, gifts, giftExtensions);
結果のデカルト積には、人物、ギフト、ギフト拡張子のすべての可能な組み合わせを表すセットが含まれます。
Generic型情報
Java の型システムではメソッドが返すことを許可していないことに注意することが重要です。任意の数のパラメータを持つジェネリック型。これは、入力セット内の要素のタイプに関係なく、cartesianProduct メソッドが Set
以上がJavaで任意の数のセットのデカルト積を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。