ホームページ > バックエンド開発 > C++ > LINQのデカルト製品を使用して、アレイ要素のすべての可能な組み合わせを生成する方法は?

LINQのデカルト製品を使用して、アレイ要素のすべての可能な組み合わせを生成する方法は?

Barbara Streisand
リリース: 2025-01-31 05:36:10
オリジナル
362 人が閲覧しました

How to Generate All Possible Combinations of Array Elements Using LINQ's Cartesian Product?

linqを使用してさまざまな組み合わせを生成します

2番目のアレイのすべての要素の可能な組み合わせを作成することを望んでいます。たとえば、与えられた:

array1:{a、b、c}

    array2:{3、2、4}
  • 次の組み合わせを生成したい:

このプロセスでは、これら2つの配列のシーケンスのフラグメントを取得する必要があります。 LINQは、このデカルトを生成するための直接的な方法を提供します:

<code>    a1 b1 c1
    a1 b1 c2
    a1 b1 c3
    a1 b1 c4

    a1 b2 c1
    a1 b2 c2
    a1 b2 c3
    a1 b2 c4


    a2 b1 c1
    a2 b1 c2
    a2 b1 c3
    a2 b1 c4

    a2 b2 c1
    a2 b2 c2
    a2 b2 c3
    a2 b2 c4


    a3 b1 c1
    a3 b1 c2
    a3 b1 c3
    a3 b1 c4

    a3 b2 c1
    a3 b2 c2
    a3 b2 c3
    a3 b2 c4 (最后一行)</code>
ログイン後にコピー
descartes

を作成します

このメソッドは、シーケンスのシーケンスを取得し、凝集演算子を使用してデカルトの蓄積を蓄積します。それは積列剤として空のシーケンスから始まり、入力シーケンスの各シーケンスと繰り返し結合します。各組み合わせについて、カミュレータ内の要素と現在のシーケンスの要素を圧縮して、水晶体の蓄積を生成します。

圧縮データ
<code class="language-csharp">static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences)
{
    IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
    return sequences.Aggregate(
        emptyProduct,
        (accumulator, sequence) =>
            from accseq in accumulator
            from item in sequence
            select accseq.Concat(new[] { item })
    );
}</code>
ログイン後にコピー

デカルトの蓄積が得られたら、最初の配列の要素と2番目の配列の2番目の配列の対応する要素を圧縮できます。

CartesianProductメソッドにより、複数のシーケンスのデカルトを簡単に生成できます。 2番目の配列の各要素の整数範囲を生成して、シーケンスのシーケンスを作成し、最初の配列でこれらの範囲のデカルトを圧縮して、必要な組み合わせを作成します。

最後に、シーケンスのシーケンスのシーケンスを通過し、各行を印刷できます。

このコードは、文字列として組み合わせを生成し、コンソールに印刷します。
<code class="language-csharp">var arr1 = new[] { "a", "b", "c" };
var arr2 = new[] { 3, 2, 4 };
var result = from cpLine in CartesianProduct(
                 from count in arr2 select Enumerable.Range(1, count))
             select cpLine.Zip(arr1, (x1, x2) => x2 + x1);</code>
ログイン後にコピー

以上がLINQのデカルト製品を使用して、アレイ要素のすべての可能な組み合わせを生成する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート