这可能很简单,但是我的尝试(在Intellisense和MSDN的指导下)都偏离了常规。

如果我有一个包含3个double的类,如何获得这些列表的平均值?

class DataPoint
{
    public int time;
    public int X;
    public int Y;
    public int Z;
    // Constructor omitted
}

class Main
{
    List<DataPoint> points = new List<DataPoint>();
    // Populate list
    DataPoint averagePoint = points.Average(someMagicHere);
}


我希望averagePoint包含timexyz值,这些值是组成列表的元素的这些属性的平均值。我该怎么做呢?我正在苦苦挣扎的是(我想)someMagicHere,但是我可能完全使用了错误的方法。

最佳答案

static class DataPointExtensions
{
 public static DataPoint Average (this IEnumerable<DataPoint> points)
 {
   int sumX=0, sumY=0, sumZ=0, count=0;
   foreach (var pt in points)
   {
      sumX += pt.X;
      sumY += pt.Y;
      sumZ += pt.Z;
      count++;
   }
   // also calc average time?
   if (count == 0)
     return new DataPoint ();
   return new DataPoint {X=sumX/count,Y=sumY/count,Z=sumZ/count};
 }
}

关于c# - 如何编写扩展函数以返回自定义类型的平均值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6298763/

10-09 03:08