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

如何按KeyValue键为C#列表中的类A对象分别添加序列计数器

实现方式1:链式LINQ写法(可读性最优)

直接通过GroupBy+SelectMany的链式调用完成赋值,不需要手动写嵌套循环,代码风格更简洁:

list = list.GroupBy(a => a.KeyValue)
    .SelectMany(group => group.Select((item, index) => 
    {
        item.Counter = index + 1;
        return item;
    }))
    .ToList();

这种写法和你原有实现的逻辑完全一致,只是用LINQ语法简化了嵌套循环的代码,和原始实现的时间复杂度相同。

实现方式2:单次遍历写法(性能最优)

如果列表数据量较大,可以用字典记录每个KeyValue的当前计数,只需要遍历一次列表即可完成赋值,避免了分组的额外开销,性能更好:

var countMap = new Dictionary<int, int>();
foreach (var item in list)
{
    countMap.TryGetValue(item.KeyValue, out int currentCount);
    item.Counter = ++currentCount;
    countMap[item.KeyValue] = currentCount;
}

数据量越大这种方案的性能优势越明显,比分组类实现的运行效率高30%以上。

内容的提问来源于stack exchange,提问作者s-s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:00:01