linq统计扩展方法

 

 

最近在编写质量统计方面的程序,发现若是使用linq的扩展方法的话,会使得代码更加简洁。

FCL默认的扩展方法只有一些常用的扩展方法,如MaxMinSum等,并没有标准差、中位数等统计方面的函数。

添加扩展方法很简单,定义一个静态类,然后在里面添加静态方法,这些静态方法会被Linq识别为扩展方法。如图所示:

 

linq统计扩展方法 

 

示例代码:

/// <summary>

    /// 统计扩展

    /// </summary>

    public static class LinqStatisticExtension

    {

        /// <summary>

        /// 计算标准差

        /// </summary>

        /// <param name="data"></param>

        /// <returns></returns>

        public static double StandardDeviation( this IEnumerable<double> data )

        {

            double squareSum = 0; // 平方和



            double standardDeviation = 0; // 标准差



            // 计算平方和

            foreach( double d in data )

            {

                squareSum += Math.Pow( ( d - data.Average() ), 2 );  // d 减均值,然后开2次方,然后累加

            }



            standardDeviation = Math.Sqrt( squareSum / data.Count() );  // 平方和除n, 然后算平方根



            return standardDeviation;

        }





}

 

调用方式:

 

List<double> data = new List<double> { 

                144.56, 144.500, 144.410, 144.450, 144.350, 144.520, 144.560, 144.320, 144.290, 144.410,

                144.56, 144.520, 144.750, 144.420, 144.520, 144.650, 144.520, 144.520, 144.560 ,144.350,

            };

   

            Console.WriteLine( "标准差:" + data.StandardDeviation().ToString( "F2" ) );

 

ps:如果你觉得本文写得不错的话,请写几句评论鼓励一下我吧。~^o^~ 

 

你可能感兴趣的:(LINQ)