使用 LINQ 產生小狗集的笛卡爾積
LINQ 提供了一個優雅的解決方案來創建笛卡爾積,鏡像 SQL 的功能。 讓我們用一個涉及人、他們的狗以及每隻狗所生的小狗的場景來說明這一點。 目標是產生所有可能的小狗組合,從一個人擁有的每隻狗中選擇一隻小狗。
已知組數
如果狗組(以及小狗組)的數量是預先決定的,則簡單的 LINQ 查詢就足夠了:
<code class="language-csharp">from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new { p1, p2, p3 };</code>
此查詢產生小狗的所有組合,dog1
、dog2
和 dog3
各一個。
未知組數
處理未知數量的狗組需要更靈活的方法:
CartesianProduct<T>
方法: 建立了一個遞歸方法 CartesianProduct<T>
。此方法接受代表小狗集合的 IEnumerable<T>
序列。
遞歸實作: CartesianProduct<T>
方法從輸入序列遞歸產生所有可能的組合。
使用此方法,可以簡潔地得到笛卡爾積:
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
這一行產生所有可能的小狗組合,確保從屬於該人的每隻狗中選擇一隻小狗。
這種基於 LINQ 的方法利用集合運算和遞歸,無論輸入集有多少,都可以有效產生笛卡爾積,從而提供強大且適應性強的解決方案。
以上是如何使用 LINQ 高效率產生 Puppy 集的笛卡爾積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!