一个datatable中包含了ID(ID可为字母、数字或字母+数字)和Name两列数据总计一百万条,如何用二分发快速的查找到ID为600005这条数据?谢谢!

解决方案 »

  1.   

    DataTable类不是有个select方法么?
    DataTable dt = ...;
    DataRow dr = dt.Select("ID='600005'");
    这样不就可以么?
      

  2.   

    嗯,DataTable实现了查找功能,返回满足条件的DataRow对象
      

  3.   


      static int find(DataTable table, int findvalue, int maxvalue)
            {
                int left = 0;
                int right = maxvalue-1;
                int middle = (left + right) / 2;
                while (left <= right)
                {
                    int value = Convert.ToInt32(table.Rows[middle][0]);
                    if (value == findvalue)
                    {
                        return middle;
                    }
                    if (value < findvalue)
                    {
                        left = middle + 1;
                    }
                    else
                    {
                        right = middle - 1; 
                    }
                    middle = (left + right) / 2;
                }
                return -1;
            } DateTime end = DateTime.Now;
                Console.WriteLine("Name:{0}",table.Select("id="+id.ToString())[0][1]);
                Console.WriteLine((end-begin).Milliseconds);            begin = DateTime.Now;
                int index = find(table, id, LENGTH);
                Console.WriteLine("Name:{0}", table.Rows[index][1]);
                end = DateTime.Now;            Console.WriteLine((end - begin).Milliseconds);LENGTH为2000000,id为1200005的情况下测了一下,用时都是31,有空可以看看table的Select方法代码是怎么写的
      

  4.   

    二分法的前提是查找有序线性表,上面的例子中table是id为0-2000000的升序