在列表<T>字段上计算平均值

16

我有一个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});
    }
}

Enumerable.Average - huMpty duMpty
3个回答

33

Enumerable.Average有一个重载,它接受一个Func<T, int>作为参数。

using System.Linq;

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

@D Stanley,为什么在这种情况下Select()不好?在性能方面有什么缺点吗? - Sheen
@Sheen 尽管在大多数情况下不会引起注意,但由于您在平均值的枚举器之上添加了另一个枚举器,因此会有轻微的性能损失。这是额外的间接层。但主要问题是:您不需要它。调用您不需要的方法会妨碍可读性,并在最好的情况下增加复杂性。如果您有一长串的 Linq 方法调用,添加不必要的“Selects”将使您的眼睛流血。 - dcastro

5
你可以尝试这个:
var average = ListOfA.Select(x=>x.a).Average();

其中ListOfA是一个类型为A的对象列表。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接