代码之家  ›  专栏  ›  技术社区  ›  JCasso

C语言中数据表和字符串数组的快速匹配方法#

  •  2
  • JCasso  · 技术社区  · 16 年前

    我有一个 DataTable 包含以下列:

    • 身份证件
    • MSISDN
    • 地位
    • 另一列

    和A string[2][n] 数组(多维):

    msisdn,状态,无用数据。…

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

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

    要匹配这个数据表和字符串数组并执行上面的操作,最快的方法是什么?

    如有任何建议或帮助,我们将不胜感激。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Adam Robinson    16 年前

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

    最快的方法可能是 DataView 尽管Linq to DataSet 在.NET 3.5中的S可能也一样好。像这样:

    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];
        }
    }
    
        2
  •  2
  •   Christian Pena    16 年前

    由于msisdn在数组中是唯一的,因此可以考虑将该数组设置为由msisdn键控的字典。只需遍历行一次,并在执行过程中查找字典中的键。

        3
  •  1
  •   Joel Coehoorn    16 年前

    10万美元的问题是数据是排序的还是容易排序的。如果这些集合中的一个或两个都按msisdn排序,则操作将 许多的 更快:O(n) )对于两种排序,O(n log n)代表1排序,O(n)代表两者。

    当然,您使用的算法也会根据这个答案而变化,所以我们需要在给出更多细节之前听到关于这个问题的响应。