C# 如何在2或3分钟内比较大量字符串
我有两个类或数组。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来实现这一点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
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秒内完成。非常感谢你。