C# 如何计算列表中每n个数字的平均值
有一个数字列表,我想取每个n(例如5、10等)元素,计算它们的平均值,并将平均值放入一个新列表中。例如,假设我们有以下列表: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 现在,我们计算每2个元素的平均值,并将以下列表作为输出: 1.5 , 3.5 , 5.5 , 7.5C# 如何计算列表中每n个数字的平均值,c#,C#,有一个数字列表,我想取每个n(例如5、10等)元素,计算它们的平均值,并将平均值放入一个新列表中。例如,假设我们有以下列表: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 现在,我们计算每2个元素的平均值,并将以下列表作为输出: 1.5 , 3.5 , 5.5 , 7.5 我该怎么做 这个问题只是测试迭代和模运算符的使用。模数为您提供除法的余数,您可以使用它在迭代数组时检查当前数是否应包含在平均数中。这里是一个示例方法 public float nthsAverage(int
我该怎么做 这个问题只是测试迭代和模运算符的使用。模数为您提供除法的余数,您可以使用它在迭代数组时检查当前数是否应包含在平均数中。这里是一个示例方法
public float nthsAverage(int n, int[] numbers)
{
// quick check to avoid a divide by 0 error
if (numbers.Length == 0)
return 0;
int sum = 0;
int count = 0;
for (int i = 0; i < numbers.Length; i++)
{
// might want i+1 here instead to compensate for array being 0 indexed, ie 9th number is at the 8th index
if (i % n == 0)
{
sum = sum + numbers[i];
count++;
}
}
return (float)sum / count;
}
public float nthsAverage(int n,int[]数字)
{
//快速检查以避免被0除的错误
如果(number.Length==0)
返回0;
整数和=0;
整数计数=0;
for(int i=0;i
公共列表平均值(列表编号,整数)
{
var-currentElement=0;
var currentSum=0.0;
var newList=新列表();
foreach(编号中的var项目)
{
当前金额+=项目;
currentElement++;
if(currentElement==neElement)
{
newList.Add(currentSum/neelement);
currentElement=0;
电流和=0.0;
}
}
//可能数组元素计数与被请求的不一样,所以求最后一个和的平均值。如果需要,可以删除此条件
如果(currentElement>0)
{
newList.Add(currentSum/currentElement);
}
返回newList;
}
您可以使用for循环和可枚举。平均值
:
var averages = new List<double>();
for (int i = 0; i < ints.Length; i += 2)
{
int thisInt = ints[i];
int nextInt = i == ints.Length - 1 ? thisInt : ints[i + 1];
averages.Add(new[] { thisInt, nextInt }.Average());
}
var平均值=新列表();
对于(整数i=0;i<整数长度;i+=2)
{
int thisInt=int[i];
intnextint=i==ints.Length-1?thisInt:ints[i+1];
Add(new[]{thisInt,nextInt}.Average());
}
以下是一种适用于任何长度的动态方法:
int take = 2;
for (int i = 0; i < ints.Length; i += take)
{
if(i + take >= ints.Length)
take = ints.Length - i;
int[] subArray = new int[take];
Array.Copy(ints, i, subArray, 0, take);
averages.Add(subArray.Average());
}
int-take=2;
for(int i=0;i=整数长度)
take=整数长度-i;
int[]子数组=新int[take];
复制(整数,i,子数组,0,take);
averages.Add(subArray.Average());
}
到目前为止,您试图做些什么来解决这个问题,您尝试的解决方案有哪些问题?@mituw16:我不能想出一个好的算法来解决这个问题,不管我做了什么,都有一个缺陷。好的,这不是问题!发布您尝试过的内容,以便我们可以帮助您指出正确的方向:)我考虑过这一点,但如果最后一步if语句不正确,会发生什么?然后,最后的数字将被省略。@Erik如果if语句不为true,则表示该数字不是每个n
。例如,如果我在一个集合中有9个项目,并且n
是3,那么它将给我第三个和第六个项目(也许它应该使用I+1,因为数组是零索引的,人们通常不会以这种方式想到列表,那么它将给我第三个、第六个和第九个项目,在我的代码中,我在最后一个索引中是8)。基本上,if语句只过滤第n个数字,我将它们的值加到总和上,然后除以计数,得到第n个数字的平均值。
int take = 2;
for (int i = 0; i < ints.Length; i += take)
{
if(i + take >= ints.Length)
take = ints.Length - i;
int[] subArray = new int[take];
Array.Copy(ints, i, subArray, 0, take);
averages.Add(subArray.Average());
}