C# 如何计算列表中每n个数字的平均值

C# 如何计算列表中每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

有一个数字列表,我想取每个n(例如5、10等)元素,计算它们的平均值,并将平均值放入一个新列表中。例如,假设我们有以下列表: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 现在,我们计算每2个元素的平均值,并将以下列表作为输出: 1.5 , 3.5 , 5.5 , 7.5
我该怎么做

这个问题只是测试迭代和模运算符的使用。模数为您提供除法的余数,您可以使用它在迭代数组时检查当前数是否应包含在平均数中。这里是一个示例方法

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());
}