一个datatable中包含了ID(ID可为字母、数字或字母+数字)和Name两列数据总计一百万条,如何用二分发快速的查找到ID为600005这条数据?谢谢!
解决方案 »
- 请大家来帮我解决下关于循环的问题。
- 如何用PdfReader打开带密码的PDF
- 正则问题,请教高手
- 一道算法题!高手请进
- 如何获得Datagrid行?
- 关于C#中如何往ACCESS数据库里添加自动编号的ID子段值。。请高手赐教,谢谢先!!
- 请教各位大虾,怎样判断C1FlexGrid中的单元格的内容是否为空?
- 高手请帮忙!访问sybase数据库,datagrid控件绑定数据只显示10行(不管是否分页)!
- datagrid多表头---急...在线等
- 水晶报表的打印格式问题
- 计算器代码出不来正确答案 (我这代码为考虑异常情况,只是个初学者)
- Marshal.PtrToStructure时,如何对所转结构体中元素的SizeConst赋值,谢谢!
DataTable dt = ...;
DataRow dr = dt.Select("ID='600005'");
这样不就可以么?
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方法代码是怎么写的