C# 获得List<int>众数
2015-02-04 14:55
447 查看
此文问获得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;
}
}
/// <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;
}
}
相关文章推荐
- 指向list 的指针 list<int> *pmylist = new list<int> [2];
- C# List<T>用法
- C# List<T>用法
- C#中string[]数组和list<string>泛型的相互转换
- C# List<T>用法
- [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,List<T>,Dictionary<Tkey,Tvalue>,SortedList<Tkey,Tvalue>,
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- 判断vector<int> 和list<int>容器是否完全相同
- c# List<T>与ObservableCollection<T>
- C# List<T> 数组,集合等排序
- List<> 转换为Dataset的C#代码实现 解决Nullable问题
- System.Nullable<T> int? 数据库中的int类型可以为空 在C# 中 的处理
- C# List<>与Array性能比较
- C# 中 Ilist<T> 转换成 DataTable
- C# LIST<> ilis<> 区别
- C# List<T>用法
- C# List<T>使用方式
- C#中List<T>对象的深度拷贝问题
- C# List<T>用法
- c# Json List<T> DataTable 数据相互转换