【问题标题】:Counting average on list<T> field计算 list<T> 字段的平均值
【发布时间】:2014-08-14 17:35:41
【问题描述】:

我有 A 的列表,我想计算它的字段 a 的平均值。
最好的方法是什么?

class A
{
    int a;
    int b;
}
void f()
{
    var L = new List<A>();
    for (int i=0; i<3; i++)
    {
        L.Add(new A(){a = i});
    }
}

【问题讨论】:

标签: c# .net iterator average mean


【解决方案1】:

Enumerable.Average 有一个将Func&lt;T, int&gt; 作为参数的重载。

using System.Linq;

list.Average(item => item.a);

【讨论】:

  • @D Stanley,为什么 Select() 在这种情况下不好?在性能方面有什么劣势吗?
  • @Sheen 尽管在大多数情况下它不会引起注意,但性能会受到轻微影响,因为您在 average 的枚举数之上添加了另一个枚举数。这是一个额外的间接级别。但主要问题是:你不需要它。调用不需要的方法会妨碍可读性并增加复杂性。如果你有一大串 linq 方法调用,在两者之间添加不必要的 Selects 会让你的眼睛流血。
【解决方案2】:

您可以使用Enumerable.Average

var average = L.Select(r => r.a).Average();

【讨论】:

    【解决方案3】:

    你可以试试这个:

    var average = ListOfA.Select(x=>x.a).Average();
    

    其中ListOfAA 类型的对象列表。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多