C#编码实现获取一个数组的最大值\最小值\平均值

获取一个常规数组的大值、最小值、平均值通常的做法是使用.NET自带方法来实现,05年面试的时候遇到一个面试题,手写不用自带的方法实现数组的最大值,当时还想了一会,由于英语太陋手写代码实在太费劲。这篇文章将讲述如何自编码实现数组的大值、最小值、平均值。.

自带方法实现

首先我们来看看使用C#自带方法实现:

  int[] testarray = new int[] { 3, 2, 4, 23, 0, -5,89, 32, 22, 15,66,88 };  Console.WriteLine("最小值:{0}", testarray.Min());  Console.WriteLine("最大值:{0}", testarray.Max());  Console.WriteLine("平均:{0}", testarray.Average());//结果:最小值:-5 最大值:89 平均:28.25

编码实现

1、最小值/最大值

    实现原理是,前面的数字跟后面的数字做比较,如果前面数字大于后面的数字就交换,直到找到最小的数字。找最大的数字跟这个相反,这里使用了同一个方法,通过传值来区分。

        public static int MinorMax(int[] array,bool isMin=false)        {            if (array == null) throw new Exception("数组空异常");            int rvalue = 0;//设置临时值            bool hasValue = false;            foreach (int x in array)            {                if (hasValue)                {                  if(isMin)                    {if (x < rvalue) rvalue= x;}                    //如果是最大值改为                   else                     {if (x > rvalue) rvalue= x;}                }                else                {                    rvalue= x;                    hasValue = true;                }            }            if (hasValue) return rvalue;            throw new Exception("没找到");  }

2、实现平均值

    实现平均的原理是用循环累加和计算个数,最后总数除以个数就是平均啦,这个比较简单。

        public static double? Average(int[] array)        {            if (array == null) throw new Exception("数组空异常");            long sum = 0;//合计数            long number = 0;//数组包含的个数             foreach (int? v in array)             {                   if (v != null)                  {                        sum += v.GetValueOrDefault();//累加                        number++;//统计个数                  }             }            if (number > 0) return (double)sum / number;            return null;        }

3、查看效果

Console.WriteLine("最小值:{0}", MinorMax(testarray));Console.WriteLine("最大值:{0}", MinorMax(testarray, true));Console.WriteLine("平均:{0}", Average(testarray)); //结果:最小值:-5 最大值:89 平均:28.25

你有更好的实现方法吗?欢迎留言讨论。