首頁 >後端開發 >C++ >LINQ 如何高效率產生可變大小集合的笛卡爾積?

LINQ 如何高效率產生可變大小集合的笛卡爾積?

Patricia Arquette
Patricia Arquette原創
2025-01-18 08:46:10725瀏覽

How Can LINQ Efficiently Generate Cartesian Products of Variable-Sized Sets?

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

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