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

10万+元素List分组求均值、最值并保留极值的实现问题

分组统计实现方案

你之前的实现只是等间隔取采样点,没有对分组内的所有元素做聚合统计,无法得到均值、极值这类分组统计结果。针对10万+元素的List场景,推荐以下*O(n)*复杂度的高性能实现:


基础实现(性能最优)

该方案仅遍历原集合1次,无额外内存拷贝开销,10万级数据处理耗时可控制在毫秒级。

1. 定义分组统计结果实体

public class GroupStats
{
    // 可根据你的基础数据类型调整属性类型,比如换成int/decimal
    public double Average { get; set; }
    public double Min { get; set; }
    public double Max { get; set; }
}

2. 核心处理逻辑

public List<GroupStats> Calculate100GroupStats(List<double> source)
{
    // 预分配结果容量,避免动态扩容的性能损耗
    var result = new List<GroupStats>(100);
    int totalCount = source.Count;
    if (totalCount == 0) return result;

    // 计算每组基础大小,余数均匀分配到前N组,避免最后一组数据量偏差过大
    int baseGroupSize = totalCount / 100;
    int remainder = totalCount % 100;

    int currentPos = 0;
    for (int i = 0; i < 100; i++)
    {
        int currentGroupSize = baseGroupSize + (i < remainder ? 1 : 0);
        if (currentGroupSize <= 0) break;

        double sum = 0;
        double currentMin = double.MaxValue;
        double currentMax = double.MinValue;

        for (int j = 0; j < currentGroupSize; j++)
        {
            double val = source[currentPos];
            sum += val;
            if (val < currentMin) currentMin = val;
            if (val > currentMax) currentMax = val;
            currentPos++;
        }

        result.Add(new GroupStats
        {
            Average = sum / currentGroupSize,
            Min = currentMin,
            Max = currentMax
        });
    }
    return result;
}

简化LINQ实现(代码量少,适合小数据量场景)

如果数据量不大、追求代码简洁,可以用LINQ分组实现,性能略低于上述遍历方案:

var groupStats = source
    .Select((val, idx) => new { Val = val, GroupId = idx * 100 / source.Count })
    .GroupBy(x => x.GroupId)
    .Select(g => new GroupStats
    {
        Average = g.Average(x => x.Val),
        Min = g.Min(x => x.Val),
        Max = g.Max(x => x.Val)
    })
    .ToList();

内容的提问来源于stack exchange,提问作者Michael T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:09:01