Fast count()如何联合两个字符串数组

时间:2012-12-18 06:45:54

标签: c# optimization

在本主题Fast count() intersection of two string arrays中, Some1.Kill.The.DJ 解释了计算两个字符串数组交集的非常快速的方法。

这是:

HashSet<string> arr2Set = new HashSet<string>(arr2);
arr1.Where(x=>arr2Set.Contains(x)).Count();

同样的事情,联盟怎么样?

1 个答案:

答案 0 :(得分:2)

老实说,这种方法不应该比原作方法快,因为它基本上在幕后做同样的事情。

(编辑:arr1包含同样位于arr2的重复项目时,它甚至不是正确!它也不总是更快:我在短时间内尝试过数组,它是,但尝试在较长的数组上,它不是。)

Union的并行可能是

HashSet<string> arr2Set = new HashSet<string>(arr2);
int unionSize = arr2Set.Count + arr1.Where(x=>arr2Set.Add(x)).Count();

但它确实应该与做

没什么不同
int unionSize = arr1.Union(arr2).Count();

如果您担心表现,read this first。通过尝试这个版本并对这两个版本进行计时,您最终可能会更快地使用原始版本 - 我确实做到了。