C# 如何在2或3分钟内比较大量字符串

C# 如何在2或3分钟内比较大量字符串,c#,vb.net,C#,Vb.net,我有两个类或数组。A类有str1、str2、str3、str4、str5、str6。有200000个A。B类有St1、St2、St3、St4、St5、St6。有50000个B类。如果str1=St1和str2=St2,则将字符串添加到包含str1、str2、str3、str4、str5、str6、St3、St4、St5、St6的产品中 最简单的方法是有两个循环,但它确实需要很长的时间,我通常在6-8小时内完成。后来我尝试在excel中做同样的事情。我可以在大约5分钟内完成。但如果有人使用exce

我有两个类或数组。A类有str1、str2、str3、str4、str5、str6。有200000个A。B类有St1、St2、St3、St4、St5、St6。有50000个B类。如果str1=St1和str2=St2,则将字符串添加到包含str1、str2、str3、str4、str5、str6、St3、St4、St5、St6的产品中

最简单的方法是有两个循环,但它确实需要很长的时间,我通常在6-8小时内完成。后来我尝试在excel中做同样的事情。我可以在大约5分钟内完成。但如果有人使用excel,有时会出错。所以我想知道我是否仍然可以在代码隐藏中不使用excel来实现这一点

 Dim Products As ObservableCollection(Of Product)
    Dim lstProducts As New List(Of Product)

    for i=0 to ClassA.count-1
    for j=0 to ClassB.count-1
    if ClassA.item(i).str1 = ClassB.item(j).St1 and ClassA.item(i).str2 = ClassB.item(j).St2
    then 
    Dim p As New Product(str1, str2, str3, str4, str5, str6, St3, St4, St5, St6)
else
     Dim p As New Product(str1, str2, str3, str4, str5, str6, "", "", "", "")
    lstProducts.Add(p)
    end if
    next j
    next i

    Products = New ObservableCollection(Of Product)(lstProducts)

对于
ClassB
,创建一个
字典,其中键是一对:
(St1,St2)
,值是
ClassB
中的项目列表。对于每个
(St1、St2)
,它存储
ClassB
中具有这些
St1
St2
的所有项目。现在,您只需迭代
ClassA
,使用字典,就可以从
ClassB
中快速找到相关项目

运行时间与输入和输出的大小成线性关系


对不起,我不懂VB,所以我不会写代码。

你可以做一些事情。您可以对所有这些字符串调用GetHashCode(每个strong只调用一次,并将其存储在某处)。然后比较这些互联网,而不是字符串


您可以做的第二件事是创建一个字典,将所有字符串1存储为键。然后循环通过ClassB查找dict.ContainKey(b.str1)所在的位置,然后比较第二个字符串

这不会为您节省很多,但您应该使用
而不是
。在这种情况下,短路逻辑运算符将起作用。最终的解决方案可能取决于集合的性质。您没有提到
strN
StN
属性的类型。我在猜字符串,但是。。。组合
(str1,str2)
在您的
ClassA
集合中是唯一的吗?在
ClassB
中的
(St1、St2)
呢?如果字典对你有用,那将把问题从O(N2)减少到O(N)。预先分类可能会有帮助,但也许不会。嗨,德米特里,它真的很快!我按照建议使用这双。它在不到10秒内完成。非常感谢。你好,我用字典。它真的很快!它在不到10秒内完成。非常感谢你。