2009-11-02 108 views
2

我有以下的列的DataTable匹配在C#中的DataTable和字符串数组的一个快速方法

  • ID
  • MSISDN
  • 状态
  • another_column

string[2][n] array(多维):

{msisdn,status,useless_data}。 。 。

我需要从字符串数组中的0到n开始搜索数据表中的msisdn字段。并从字符串数组的状态字段更新数据表中的status列。

在数据表msisdn不是唯一的。多个列可能包含两次或更多的sama msisdn。但是在字符串数组中msisdn是唯一的。

什么是最快的方式来匹配这个DataTable和字符串数组,并做上面的东西?

任何想法或帮助,将不胜感激。

+1

这张表的第一个面向电信行业,因此“msisdn”字段,所以我只是在这里假设,但其他列将是StartDate和EndDate(因此多个条目),因此你需要与最新的StartDate ,此条目的EndDate很可能为NULL,即您需要专门更新的DataTable状态字段,使DataTable中的排序有效,并更改搜索。只是一个想法。 – Neil 2009-11-02 20:28:36

回答

4

首先,我希望你的字符串数组声明更像string[n][2]而不是string[2][n]。为了这个答案的目的,我会假设情况是这样的,它只是一个错字。

最快的方法可能是DataView,尽管.NET 3.5中的LINQ到DataSet可能一样好。事情是这样的:

DataView view = new DataView(yourDataTable); 
string[][] data = new string[n][2]; 

view.Sort = "msisdn"; 

for(int i = 0; i < theArray; i++) 
{ 
    view.RowFilter = "msisdn = '" + data[i][0] + "'"; 

    foreach(DataRowView row in view) 
    { 
     row["status"] = data[i][1]; 
    } 
} 
1

$ 100,000的问题是数据是排序还是可以轻松排序。如果这些集合中的一个或两个都按msisdn排序,则操作将为更快:O(n )既不排序,对于1排序的O(n log n),对于这两者都为O(n)。

当然,你使用的算法也会根据这个答案而变化,所以我们需要听到一个响应,然后才能给出更多的细节。

+0

鉴于他声称数据在“DataTable”中,似乎可以回答所有这些问题。但是,由于'DataView'维护了排序列上的列索引,我不认为数组的顺序会影响筛选时间。 – 2009-11-02 20:18:34

2

由于MSISDN是唯一的数组中,你可以考虑做数组由MSISDN键,而不是一本字典。迭代遍历行一次,并随时查看字典中的关键字。

相关问题