Mid*_*ght 0 c# arrays loops average
我有一个大数组(+400 个数字)decimal[] Raw,我需要对每 20 个数字求平均值,将这些数字发送到一个新数组或 list RawAvgList,然后形成一个新数组或 list 以获得 中数字的平均值RawAvgList。又名我的代码应该找到前 20 个数字的平均值并将它们存储在我的新数组/列表中,然后是下一个 20 个,然后是下一个 20 个。如果大数末尾的数字多于或少于 20 个,它也应该用于计数大批
我的 while 循环应该在另一个重新启动计数索引的循环中吗?我应该每 20 个数字就删除一次吗?我知道只是简单地使用Average()ondecimal[] Raw是一种选择,但数字需要比该函数给出的更准确。我也尝试过使用IndexRange,但是当数字不能被我的计数(20)整除时,它会给出错误,这将会发生。
我已经被难住了这么久,我已经无计可施,沮丧得难以置信,有什么可以帮助的。
int unitof = 20;
decimal[] Raw = new decimal[] { Decimal.Parse(line.Substring(9).ToString(), style1) };
for (int i = 0; i < Raw.Length; i++)
{
while (count < Raw.Count())
{
RawAvgList.Add(// ** Average of every 20 numbers **//);
count += unitof; // 20 by 20 counter
}
// Reset counter or add another counter??
}
Run Code Online (Sandbox Code Playgroud)
编辑(2022 年 8 月 22 日)
我按照建议添加了 IEnumerable<IEnumerable> 块,但我相信其他地方出了问题,或者我没有完全理解它是如何工作的,因为我从未使用过块。
我实现了块
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> values, int chunkSize)
{
return values
.Select((v, i) => new { v, groupIndex = i / chunkSize })
.GroupBy(x => x.groupIndex)
.Select(g => g.Select(x => x.v));
}
Run Code Online (Sandbox Code Playgroud)
添加了您的建议
var rawAvgList = Raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
var result = rawAvgList.Average();
Run Code Online (Sandbox Code Playgroud)
然后尝试打印到 Console.Writeline()
Console.WriteLine($"{result} \t " + LengthRaw++);
Run Code Online (Sandbox Code Playgroud)
这让我和输出
36.41 0
37.94 1
38.35 2
37.63 3
36.41 4
36.41 5
36.21 6
36.82 7
37.43 8
37.43 9
37.43 10
37.43 11
37.43 12
37.94 13
37.94 14
37.84 15
37.43 16
37.84 17
37.43 18
37.84 19
37.84 20
Run Code Online (Sandbox Code Playgroud)
当输出应该是(我目前只使用 21 个数字,但稍后会更多)
37.37 0
37.84 1
Run Code Online (Sandbox Code Playgroud)
您可以Enumerable.Chunk()将数据分成最多 20 个批次,然后对所有这些块进行平均:
decimal[] raw = new decimal[10000]; // Fill with your data.,
var rawAvgList = raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
var result = rawAvgList.Average();
Run Code Online (Sandbox Code Playgroud)
不过我不知道你的意思
如果大数组末尾的数字多于或少于 20 个,它也应该用于计数
如果输入的长度不是 20 个项目的倍数,那么最后一个被平均的块的长度将小于 20,但所有其他块的长度将恰好是 20。
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |