获取一个常规数组的大值、最小值、平均值通常的做法是使用.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
你有更好的实现方法吗?欢迎留言讨论。