使用 LINQ 高效產生笛卡爾積
LINQ 提供了一種強大而有效的方法來產生笛卡爾積 - 來自多個集合的元素的所有可能組合。 讓我們用一個涉及人、他們的狗和他們的狗的小狗的例子來說明這一點。 每個人擁有多隻狗,每隻狗也有多隻小狗。 目標是創建所有可能的小狗組合的列表,從給定人擁有的每隻狗中選擇一隻小狗。
處理固定數量的集合
如果集合(狗)的數量是預先決定的,一個簡單的 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>
此查詢有效地產生前三隻狗的小狗的笛卡爾積。
解可變數量的集合
但是,當組數是動態的(每個人的狗數量不同)時,需要更靈活的方法。 Eric Lippert 的 CartesianProduct<T>
方法(如他的部落格所述)提供了一個可重複使用的解決方案,用於計算任意數量的集合的笛卡爾積。
此方法允許使用可變數量的輸入集計算笛卡爾積。 它可以如下使用:
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
這簡潔地產生了屬於特定人的所有狗的小狗集合的笛卡爾積。結果是一組序列,每個序列代表小狗的獨特組合,從每隻狗中選擇一隻小狗。
總之,LINQ 提供了一種乾淨而高效的方法來產生笛卡爾積,無論是處理固定數量還是可變數量的集合,使其成為各種資料操作任務的寶貴工具。
以上是LINQ 如何高效率產生可變大小集合的笛卡爾積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!