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中文網其他相關文章!