利用LINQ對物件清單進行分組
物件導向程式設計中,經常需要根據共享條件對物件進行分組。利用LINQ(語言整合查詢)可以有效率地實現此操作。以下將探討如何將物件清單分組到一個新的分組清單中,該清單包含多個物件清單。
問題:
考慮一個表示使用者的類別:
1 2 3 4 5 6 | <code class = "language-csharp" > public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public int GroupID { get; set; }
}</code>
|
登入後複製
假設我們有一個使用者列表:
1 2 3 4 5 6 7 | <code class = "language-csharp" >List<User> userList = new List<User>();
userList.Add( new User { UserID = 1, UserName = "UserOne" , GroupID = 1 });
userList.Add( new User { UserID = 2, UserName = "UserTwo" , GroupID = 1 });
userList.Add( new User { UserID = 3, UserName = "UserThree" , GroupID = 2 });
userList.Add( new User { UserID = 4, UserName = "UserFour" , GroupID = 1 });
userList.Add( new User { UserID = 5, UserName = "UserFive" , GroupID = 3 });
userList.Add( new User { UserID = 6, UserName = "UserSix" , GroupID = 3 });</code>
|
登入後複製
我們的目標是按使用者的GroupID對使用者進行分組,從而得到一個按群組分組的使用者清單。
解:
LINQ 提供了一個強大的分組機制,可以使用 GroupBy 方法。以下程式碼片段示範如何實現所需的分組:
1 2 3 4 | <code class = "language-csharp" > var groupedUserList = userList
.GroupBy(u => u.GroupID)
.Select(grp => grp.ToList())
.ToList();</code>
|
登入後複製
程式碼分解:
-
GroupBy: 這是分組運算的核心。它按使用者的GroupID對使用者進行分組,產生一個群組列表,其中每個群組代表屬於同一群組的使用者。
-
Select: 由於GroupBy的輸出是群組清單(表示為
IGrouping<int, User>
),我們需要從每個群組中選擇使用者。我們在Select中使用ToList方法將每個群組轉換為使用者清單。
-
ToList: 最後,我們使用ToList將使用者清單清單轉換回一個清單。
groupedUserList
現在包含所需的分組:一個使用者列表列表,其中每個內部列表代表屬於同一組的使用者。
以上是如何使用 LINQ 以共享屬性對物件清單進行分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!