此文问获得List<Int>的众数:
/// <summary>
/// 获得高程的众数/// </summary>
/// <param name="elevationList">传入list<int>数据</param>
/// <returns></returns>
private int GetElevationMode(List<int> elevationList)
{
try
{
int count;
bool flag = false;
Dictionary<int, int> dictionary = new Dictionary<int, int>();
for (int i = 0; i < elevationList.Count; i++)
{
if (dictionary.TryGetValue(elevationList[i], out count))
{
flag = true;
dictionary[elevationList[i]]++;
}
else
dictionary.Add(elevationList[i], 1);
}
//如果没有众数,返回空
if (!flag)
return 0;
int max = 0;
int position = 0;
int[] modeArray = new int[elevationList.Count];//众数数组
//遍历hash表
foreach (KeyValuePair<int, int> myKey in dictionary)
{
if (myKey.Value > max)
{
max = myKey.Value;
position = 0;
modeArray[0] = myKey.Key;
}
else if (myKey.Value == max)
modeArray[++position] = myKey.Key;
}
Array.Resize(ref modeArray, position + 1);
int mode = 0;
//如果众数不唯一,求平均数
if (modeArray.Length > 1)
{
for (int i = 0; i < modeArray.Length; i++)
{
mode += modeArray[i];
}
double elevationMode = mode / modeArray.Length;
}
//如果众数唯一,返回众数
else
{
mode = modeArray[0];
}
return mode;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return 0;
}
}