首页 >后端开发 >C++ >如何使用 LINQ 按共享属性对对象列表进行分组?

如何使用 LINQ 按共享属性对对象列表进行分组?

Susan Sarandon
Susan Sarandon原创
2025-01-13 12:12:431014浏览

How Can I Group a List of Objects by a Shared Property Using LINQ?

利用LINQ对对象列表进行分组

面向对象编程中,经常需要根据共享条件对对象进行分组。利用LINQ(语言集成查询)可以高效地实现此操作。下文将探讨如何将对象列表分组到一个新的分组列表中,该列表包含多个对象列表。

问题:

考虑一个表示用户的类:

<code class="language-csharp">public class User
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public int GroupID { get; set; }
}</code>

假设我们有一个用户列表:

<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 方法。以下代码片段演示了如何实现所需的分组:

<code class="language-csharp">var groupedUserList = userList
    .GroupBy(u => u.GroupID)
    .Select(grp => grp.ToList())
    .ToList();</code>

代码分解:

  1. GroupBy: 这是分组操作的核心。它按用户的GroupID对用户进行分组,生成一个组列表,其中每个组代表属于同一组的用户。
  2. Select: 由于GroupBy的输出是组列表(表示为IGrouping<int, User>),我们需要从每个组中选择用户。我们在Select中使用ToList方法将每个组转换为用户列表。
  3. ToList: 最后,我们使用ToList将用户列表列表转换回一个列表。

groupedUserList现在包含所需的分组:一个用户列表列表,其中每个内部列表代表属于同一组的用户。

以上是如何使用 LINQ 按共享属性对对象列表进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn