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

C#数组每20元素求平均及Chunk方法使用异常的技术求助

问题排查与解决方案

问题核心分析

你的Chunk扩展方法逻辑是正确的:对于21个元素的数组,它会将前20个分为一组,最后1个单独成组,因此rawAvgList的长度应该是2,而非21。输出21行结果的原因并非Chunk逻辑错误,而是你的计算+输出代码被重复执行了21次。

具体排查点

检查你的代码上下文:

  • 是否将这段计算代码放在了遍历Raw数组的循环(比如foreach/for)内部?如果是,每次循环都会执行一次Chunk计算和Console.WriteLine,自然会输出21行。
  • 变量LengthRaw++的自增逻辑是否导致代码被循环调用?比如如果LengthRaw是循环计数器,这段代码可能被嵌套在循环中。

验证与修正步骤

  1. 验证Chunk逻辑正确性:在计算后添加一行代码打印rawAvgList的长度,确认分组结果:

    var rawAvgList = Raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
    Console.WriteLine($"rawAvgList长度:{rawAvgList.Length}"); // 预期输出2
    var result = rawAvgList.Average();
    Console.WriteLine($"{result} \t " + LengthRaw);
    

    如果输出长度为2,说明分组和平均计算完全正常。

  2. 修正执行次数问题:将这段计算与输出代码移到所有遍历Raw的循环外部,确保只执行一次。比如如果之前代码是这样的:

    foreach(var item in Raw)
    {
        // 其他代码...
        var rawAvgList = Raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
        var result = rawAvgList.Average();
        Console.WriteLine($"{result} \t " + LengthRaw++);
    }
    

    要改成:

    // 移到循环外部,只执行一次
    var rawAvgList = Raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
    var result = rawAvgList.Average();
    Console.WriteLine($"{result} \t " + LengthRaw);
    
    foreach(var item in Raw)
    {
        // 其他代码...
        LengthRaw++; // 如果需要自增,放在循环内
    }
    

关于精度的补充说明

decimal类型的Average()方法是基于高精度十进制运算实现的,不会出现精度丢失问题,你完全可以放心使用,无需额外手动计算平均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:15:36