ホームページ >データベース >mysql チュートリアル >LINQ を使用して複数のセットのデカルト積を計算するにはどうすればよいですか?

LINQ を使用して複数のセットのデカルト積を計算するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-17 07:01:09210ブラウズ

How Can LINQ Be Used to Calculate the Cartesian Product of Multiple Sets?

LINQ を使用してデカルト積を検索する

デカルト積演算は、複数のセットを結合して、入力セット内の要素の可能なすべての組み合わせを含む新しいセットを作成します。

提供されたクラス構造 (人が複数の犬を持ち、各犬が複数の子犬を飼っている場合) でデカルト積演算を実行するには、LINQ を効果的に活用できます。

まず、複数のセットを入力として受け取るデカルト積関数を作成します。

<code>public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(params IEnumerable<T>[] sets)
{
    if (sets.Length == 0)
    {
        return new[] { Enumerable.Empty<T>() };
    }

    return sets[0].SelectMany(x => sets.Skip(1).Aggregate(
        new[] { x },
        (acc, set) => CartesianProduct(acc, set) // 修正此处
    ));
}</code>

次に、関数を各犬の子犬のセットに適用します。

<code>var puppyCombinations = CartesianProduct(
    from dog in person.Dogs
    select dog.Puppies
);</code>

これにより、シーケンスのシーケンスが生成されます。各内部シーケンスは、各犬からの 1 匹の子犬の組み合わせを表します。結果として得られる組み合わせは、必要に応じてアクセスして処理できます。 (ここのコードは、CartesianProduct 関数の実装に応じて、読みやすさと潜在的な効率を向上させるためにわずかに調整されています。)

注: 上記の CartesianProduct 関数の実装は、堅牢性と効率性を確保するために空のコレクションやその他のエッジ ケースを処理するためにさらなる改善が必要な場合があります。 よりクリーンで理解しやすい再帰的実装の方が適している可能性があります。

以上がLINQ を使用して複数のセットのデカルト積を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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