首頁 >資料庫 >mysql教程 >LINQ 如何有效地從多隻狗產生所有可能的小狗組合?

LINQ 如何有效地從多隻狗產生所有可能的小狗組合?

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

How Can LINQ Efficiently Generate All Possible Puppy Combinations from Multiple Dogs?

LINQ實現笛卡爾積

假設您有一個類結構,其中一個人擁有多條狗,每隻狗有多隻幼犬,您希望找到一個LINQ解決方案來生成所有可能的幼犬組合,每個組合從每隻狗中選擇一隻幼犬。

這裡適用笛卡爾積的概念,它涉及將集合相乘以生成元素的唯一組合。雖然SQL表為此提供了一個簡單的解決方案,但LINQ提供了一種優雅的方法。

首先,考慮在編譯時知道集合(狗)數量的情況。您可以使用一個簡單的LINQ查詢:

<code>var combinations = from p1 in dog1.Puppies
                  from p2 in dog2.Puppies
                  from p3 in dog3.Puppies
                  select new {p1, p2, p3};</code>

此查詢將產生一系列匿名類型,每個類型代表每個狗中一隻幼犬的組合。

但是,在編譯時不知道集合數量的情況下,需要更動態的方法。可以參考Eric Lippert的文章,了解使用LINQ計算笛卡兒積的方法:

https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9

取得CartesianProduct方法後:

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

這將傳回一系列序列,其中每個內部序列包含每個狗中一隻幼犬的組合。

總而言之,無論狗的數量是靜態的還是動態的,您都可以使用LINQ來產生所需的幼犬組合。

以上是LINQ 如何有效地從多隻狗產生所有可能的小狗組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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