需求如下:
有一个DataTable 定义如下
Number1,Number2,Number3,Number4,Number5,Number6,Number7
其中 Number1,Number2,Number3,Number4,Number5,Number6 是从1~33的任意数字
Number7是1~16的任意数字
现在需要根据这个DataTable的Number1,Number2,Number3,Number4,Number5,Number6统计
1,2,3.......33出现的次数
根据Number7 统计
1,2,3.....16出现的次数
比如这个DataTable一共有 50条数据
在这50条数据内为数字1出现了5次2出现了7次等等。
比较一般的方法 多写几个Swith Case当然可以实现,
希望大家 根据这个需求写出一个 比较简洁的算法,学习一下。
有一个DataTable 定义如下
Number1,Number2,Number3,Number4,Number5,Number6,Number7
其中 Number1,Number2,Number3,Number4,Number5,Number6 是从1~33的任意数字
Number7是1~16的任意数字
现在需要根据这个DataTable的Number1,Number2,Number3,Number4,Number5,Number6统计
1,2,3.......33出现的次数
根据Number7 统计
1,2,3.....16出现的次数
比如这个DataTable一共有 50条数据
在这50条数据内为数字1出现了5次2出现了7次等等。
比较一般的方法 多写几个Swith Case当然可以实现,
希望大家 根据这个需求写出一个 比较简洁的算法,学习一下。
不使用 DB 直接从CSV 读取数据,得到一个基础的DataTable
//增加列
for(int i = 1; i <= 7; i++)
{
dataTable.Columns.Add(string.Format("Number{0}", i), typeof(int));
}
//填充数据
Random rand = new Random();
for (int i = 0; i < 50; i++)
{
DataRow dr = dataTable.NewRow();
for (int j = 0; j < 6; j++)
{
dr[j] = 1 + rand.Next(33);
}
dr[6] = 1 + rand.Next(16);
dataTable.Rows.Add(dr);
}
//开始统计
SortedDictionary<int, int> freq = new SortedDictionary<int, int>();
for (int i = 0; i < 50; i++)
{
for (int j = 0; j < 7; j++)
{
int n = Convert.ToInt32(dataTable.Rows[i][j]);
if (freq.ContainsKey(n))
{
freq[n]++;
}
else
{
freq.Add(n, 1);
}
}
}freq就是你要的统计数据。