linqを使用してさまざまな組み合わせを生成します
2番目のアレイのすべての要素の可能な組み合わせを作成することを望んでいます。たとえば、与えられた:
array1:{a、b、c}
このプロセスでは、これら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>
このメソッドは、シーケンスのシーケンスを取得し、凝集演算子を使用してデカルトの蓄積を蓄積します。それは積列剤として空のシーケンスから始まり、入力シーケンスの各シーケンスと繰り返し結合します。各組み合わせについて、カミュレータ内の要素と現在のシーケンスの要素を圧縮して、水晶体の蓄積を生成します。
圧縮データ<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 サイトの他の関連記事を参照してください。