ホームページ >バックエンド開発 >C++ >LINQを使用して2つの配列からキャラクターと整数のすべての可能な組み合わせを生成する方法は?

LINQを使用して2つの配列からキャラクターと整数のすべての可能な組み合わせを生成する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-31 05:21:38786ブラウズ

How to Generate All Possible Combinations of Characters and Integers from Two Arrays Using LINQ?

可能なすべての組み合わせを生成

問題の説明

2つの配列、Array1には文字が含まれ、Array2には整数が含まれています。これらの組み合わせは、可能なすべてのI、J、Kなどを通過する必要があります。これらの値は、Array2の対応する要素によって決定されます。

回答

LINQとのすべての可能な組み合わせを生成するには、「Descartes」と呼ばれるテクノロジーを使用できます。このプロセスには、複数の入力シーケンスから可能な各要素の組み合わせが含まれるシーケンスの作成が含まれます。

デカルトの蓄積

次のコードは拡張メソッドを定義します

、任意の数値シーケンスのslidelの蓄積を実行します:

CartesianProduct文字列の組み合わせを生成

<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>

メソッドがあると、フォーマット形式の文字列が非常に簡単になります。

この例では、

変数には文字列シーケンスのシーケンスが含まれており、それぞれが線の組み合わせを表します。 CartesianProduct

出力の組み合わせ 質問の説明で指定された出力の組み合わせに、単純なサイクルを使用できます。
<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(i => i.ToString()))
             select cpLine.Zip(arr1, (x1, x2) => x2 + "(" + x1 + ")");</code>

resultメソッドをデカルトの範囲と範囲の元の文字配列に適用することにより、指定された要素のすべての可能な組み合わせを効果的に生成できます。

この復活した回答は、コードの明確さを改善し、「A(i)b(j)」形式の世代ごとに直接対処します。

以上がLINQを使用して2つの配列からキャラクターと整数のすべての可能な組み合わせを生成する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。