LINQ之Average

返回LINQ大全首页

Average()

通过Average()您可以找到序列(例如数组或列表)中元素的平均值。
MSDN

处理小数的类型,如decimal类型,double类型,float等类型的平均值很容易。可以通过调用每种类型的数组或列表Average()来获得平均值。

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        // 数值
        float[]     floatNumbers    = new float[]   { 1.0f, 3.0f, 6.0f };
        double[]    doubleNumbers   = new double[]  { 1.0d, 3.0d, 6.0d };
        decimal[]   decimalNumbers  = new decimal[] { 1.0m, 3.0m, 6.0m };

        float   floatAverage    = floatNumbers.Average();
        double  doubleAverage   = doubleNumbers.Average();
        decimal decimalAverage  = decimalNumbers.Average();

        // 输出
        System.Console.WriteLine( "floatNumbers:{0}",   floatNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",           floatAverage );

        System.Console.WriteLine( "doubleNumbers:{0}",  doubleNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",           doubleAverage );

        System.Console.WriteLine( "decimalNumbers:{0}", decimalNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",           decimalAverage );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }

} // class Program
floatNumbers:[1], [3], [6],
平均:3.333333
doubleNumbers:[1], [3], [6],
平均:3.33333333333333
decimalNumbers:[1.0], [3.0], [6.0],
平均:3.3333333333333333333333333333

整数类型inttype和longtype可以使用Average()来计算平均值。
但是应注意返回值是double类型,因为平均值通常不能用整数表示。

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        int[]   intNumbers  = new int[]     { 1, 2, 3, 4 };
        long[]  longNumbers = new long[]    { 1, 2, 3, 4 };

        double  intAverage  = intNumbers.Average();
        double  longAverage = longNumbers.Average();

        System.Console.WriteLine( "intNumbers:{0}", intNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",       intAverage );

        System.Console.WriteLine( "longNumbers:{0}",    longNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",           longAverage );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }

} 
intNumbers:[1], [2], [3], [4],
平均:2.5
longNumbers:[1], [2], [3], [4],
平均:2.5

Average()还支持可空类型。
代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        int?[]  intNumbers  = new int?[]    { 1, 2, 3, 4, null };
        long?[] longNumbers = new long?[] { null, null, null, null, null };

        double? intAverage  = intNumbers.Average();
        double? longAverage = longNumbers.Average();

        System.Console.WriteLine( "intNumbers:{0}", intNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",       intAverage );

        System.Console.WriteLine( "longNumbers:{0}",    longNumbers.Text() );
        System.Console.WriteLine( "平均:{0}",           longAverage );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }

}
intNumbers:[1], [2], [3], [4], ,
平均:2.5
longNumbers:, , , , ,
平均:

也可以利用lambda表达式查询类中的平均数。

public static class Program
{
    private class Parameter
    {
        public string   Name    { get; set; }
        public int      Age     { get; set; }
        
        public override string ToString()
        {
            return string.Format( "Name:{0}, Age:{1}", Name, Age );
        }
    }

    static void Main( string[] args )
    {
        Parameter[] parameters = new Parameter[]
        {
            new Parameter() { Age = 52, Name = "正一郎" },
            new Parameter() { Age = 28, Name = "清次郎" },
            new Parameter() { Age = 20, Name = "誠三郎" },
            new Parameter() { Age = 18, Name = "征史郎" },
        };

        double average  = parameters.Average( value => value.Age );
        
        System.Console.WriteLine( "parameters:{0}", parameters.Text() );
        System.Console.WriteLine( "平均:{0}", average );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }

}
parameters:[Name:正一郎, Age:52], [Name:清次郎, Age:28], [Name:誠三郎, Age:20],
[Name:征史郎, Age:18],
平均:29.5
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值