需求如下:
有一个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当然可以实现,
希望大家 根据这个需求写出一个 比较简洁的算法,学习一下。

解决方案 »

  1.   

    统计双色球吧 直接用SQL 的SELECT
      

  2.   

    高手,看来都统计过。
    不使用 DB 直接从CSV 读取数据,得到一个基础的DataTable
      

  3.   

    那就DataTable都省了吧..直接用两个List<>去保存..然后用FindAll去查....速度快.代码量又少..
      

  4.   

    System.Data.DataTable dataTable = new System.Data.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就是你要的统计数据。