首頁 > 後端開發 > C++ > LINQ的GroupBy操作員如何根據共享屬性值有效地匯總對象?

LINQ的GroupBy操作員如何根據共享屬性值有效地匯總對象?

Susan Sarandon
發布: 2025-02-02 00:26:09
原創
244 人瀏覽過

How Can LINQ's GroupBy Operator Efficiently Aggregate Objects Based on Shared Property Values?

高效利用LINQ GroupBy操作符按共享屬性值聚合對象

面向對象編程中,多個對象共享特定屬性的情況很常見。例如,“Person”類包含“ID”和擁有的汽車列表。為了清晰高效地聚合與每個唯一ID關聯的汽車,我們可以使用LINQ的“GroupBy”操作符。

LINQ GroupBy操作符

GroupBy操作符根據指定鍵的值將對象序列劃分為較小的組。在我們的“Person”類中,我們可以使用“PersonId”屬性作為鍵來分組對象。這將有效地創建一個類似字典的結構,其中鍵是唯一的“PersonId”值,值是與每個“PersonId”關聯的“汽車”值的列表。

代碼示例

為了按“PersonId”分組“Person”對象並檢索相應的汽車列表,我們可以使用以下LINQ查詢表達式:

var results = from p in persons
              group p.car by p.PersonId into g
              select new { PersonId = g.Key, Cars = g.ToList() };
登入後複製

或者,我們可以使用非查詢表達式實現相同的結果:

var results = persons.GroupBy(
    p => p.PersonId, 
    p => p.car,
    (key, g) => new { PersonId = key, Cars = g.ToList() });
登入後複製

結果

“results”變量現在將包含一個匿名對象的集合,該集合具有兩個屬性:

  • “PersonId”:人的唯一ID
  • “Cars”:該人擁有的所有汽車的列表

通過迭代“results”集合,我們可以獲得每個唯一“PersonId”的所需信息。

其他考慮因素

為了與.NET命名約定保持一致,建議在使用屬性名稱時使用“PersonId”而不是“PersonID”。

GroupBy與Lookup的比較

或者,可以使用“Lookup”方法代替“GroupBy”來實現類似的結果。 “Lookup”有效地創建了一個類似字典的結構,其中鍵是唯一的“PersonId”值,值是與每個“PersonId”關聯的“汽車”值的集合。要使用“Lookup”檢索特定人的汽車,我們可以使用以下語法:

var carsForPerson = carsByPersonId[personId];
登入後複製

以上是LINQ的GroupBy操作員如何根據共享屬性值有效地匯總對象?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板