首頁 >資料庫 >mysql教程 >如何使用LINQ計算多個集合的笛卡爾積?

如何使用LINQ計算多個集合的笛卡爾積?

Barbara Streisand
Barbara Streisand原創
2025-01-17 07:01:09213瀏覽

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>

這將產生一個序列的序列,其中每個內部序列表示來自每隻狗的一隻幼犬的組合。可以存取和處理生成的組合,具體取決於需要。 (此處對程式碼進行了細微調整,以提高可讀性和潛在的效率,具體取決於CartesianProduct函數的實現。)

注意: 上述CartesianProduct函數的實現可能需要進一步改進以處理空集合或其他邊緣情況,以確保其健壯性和效率。 一個更清晰、更易於理解的遞歸實現可能更適合。

以上是如何使用LINQ計算多個集合的笛卡爾積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn