You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:15:39