首頁 >後端開發 >C++ >如何使用 LINQ 高效率產生 Puppy 集的笛卡爾積?

如何使用 LINQ 高效率產生 Puppy 集的笛卡爾積?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-18 08:36:12339瀏覽

How Can LINQ Be Used to Efficiently Generate Cartesian Products of Puppy Sets?

使用 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>

此查詢產生小狗的所有組合,dog1dog2dog3 各一個。

未知組數

處理未知數量的狗組需要更靈活的方法:

  1. CartesianProduct<T> 方法: 建立了一個遞歸方法 CartesianProduct<T>。此方法接受代表小狗集合的 IEnumerable<T> 序列。

  2. 遞歸實作: CartesianProduct<T> 方法從輸入序列遞歸產生所有可能的組合。

使用此方法,可以簡潔地得到笛卡爾積:

<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>

這一行產生所有可能的小狗組合,確保從屬於該人的每隻狗中選擇一隻小狗。

這種基於 LINQ 的方法利用集合運算和遞歸,無論輸入集有多少,都可以有效產生笛卡爾積,從而提供強大且適應性強的解決方案。

以上是如何使用 LINQ 高效率產生 Puppy 集的笛卡爾積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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