在C#中基于对象数值属性拆分列表为子列表的方法问询
在C#中按对象数值属性分组生成子列表
当然可以实现,而且针对大规模数据(比如超过1000个对象)也能高效处理。最直接的方式是使用LINQ的GroupBy方法,它会自动根据指定的数值属性对对象分组,动态生成对应数量的子列表。
步骤1:定义对象类
先对应你的示例结构,定义一个包含目标数值属性的类:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Number { get; set; } // 重写ToString方便查看输出 public override string ToString() { return $"{{\"{FirstName}\", \"{LastName}\", {Number}}}"; } }
步骤2:分组生成子列表
使用LINQ的GroupBy按数值属性分组,再转换为子列表集合:
// 构造示例主列表(实际场景可替换为你的数据源) var mainList = new List<Person> { new Person { FirstName = "Erick", LastName = "Cartman", Number = 3 }, new Person { FirstName = "Angelina", LastName = "Jollie", Number = 4 }, new Person { FirstName = "Anton", LastName = "Azul", Number = 4 }, new Person { FirstName = "Random", LastName = "Data", Number = 5 } }; // 按Number属性分组,生成子列表集合 var groupedSublists = mainList .GroupBy(person => person.Number) // 以Number为分组键 .Select(group => group.ToList()) // 将每个分组转为List<Person> .ToList(); // 最终得到子列表的集合
步骤3:输出子列表(模拟示例效果)
如果需要像示例那样输出每个子列表,可以遍历分组后的集合:
for (int i = 0; i < groupedSublists.Count; i++) { Console.WriteLine($"子列表{i+1}:"); Console.WriteLine("<pre><code>"); foreach (var person in groupedSublists[i]) { Console.WriteLine($"Object = {person}"); } Console.WriteLine("</code></pre>"); Console.WriteLine(); }
关键说明
- 性能:
GroupBy底层基于哈希表实现,时间复杂度为O(n),处理上千个对象完全没有压力,无需担心性能问题。 - 动态分组:不管主列表中有多少种不同的数值属性值,都会自动生成对应数量的子列表,无需提前预知分组数量。
- 处理可空数值:如果你的数值属性是可空类型(如
int?),只需保持GroupBy(p => p.Number)即可,null值会被自动归为单独一组。
内容的提问来源于stack exchange,提问作者Josué Campos
相关产品推荐
相关产品推荐

