笛卡爾積運算組合多個集合以建立一個新集合,其中包含輸入集合中所有可能的元素組合。
要對提供的類別結構執行笛卡爾積運算(其中一個人有多隻狗,每隻狗有多隻幼犬),可以有效地利用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中文網其他相關文章!