C#数组每20元素求平均及Chunk方法使用异常的技术求助
问题排查与解决方案
问题核心分析
你的Chunk扩展方法逻辑是正确的:对于21个元素的数组,它会将前20个分为一组,最后1个单独成组,因此rawAvgList的长度应该是2,而非21。输出21行结果的原因并非Chunk逻辑错误,而是你的计算+输出代码被重复执行了21次。
具体排查点
检查你的代码上下文:
- 是否将这段计算代码放在了遍历
Raw数组的循环(比如foreach/for)内部?如果是,每次循环都会执行一次Chunk计算和Console.WriteLine,自然会输出21行。 - 变量
LengthRaw++的自增逻辑是否导致代码被循环调用?比如如果LengthRaw是循环计数器,这段代码可能被嵌套在循环中。
验证与修正步骤
验证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,说明分组和平均计算完全正常。
修正执行次数问题:将这段计算与输出代码移到所有遍历
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
相关产品推荐
相关产品推荐

