2012-08-15 26 views
1

我有两个字符串的列表,这两个列表都是〜300,000行。列表1有比列表2更多的行。我想要做的是找到列表1中的字符串,但不是列表2中的列表。两个列表的区别C#

考虑到我要比较的字符串有多少个,是Except()还是够用的,或者有没有更好的(更快)?

+7

这只是一个问题,如果你注意到性能下降。性能问题只能由您来解答,因为只有您知道您的应用程序“太慢”。考虑最终用户,目标平台等。 – 2012-08-15 02:41:10

+1

如果重复行不是问题,则可以使用HashSet和Contains方法。 http://msdn.microsoft.com/en-us/library/bb356440.aspx – 2012-08-15 02:47:45

+1

从列表移动到哈希表,然后只使用包含似乎是一个很好的方式来快速实现非常接近的最佳性能 – 2012-08-15 02:51:33

回答

5

在内部,枚举Except扩展方法使用Set<T>执行计算。这将会和其他方法一样快。

list1.Except(list2)

它会给你最好的表现和最简单的代码。

+0

正如乔纳森指出的那样,它*可能有意义,为一个(或两个)列表使用HashSet,因为“Except”可以避免创建立即[Hash]集合。当然,这意味着原始数据排序并不重要,不允许重复,并且差异被执行的次数足以影响它。 – 2012-08-15 05:22:28

+0

@Enigmativity是的,你是对的。 – 2012-08-15 11:07:09

1

我的建议:

HashSet<String> hash1 = new HashSet<String>(new string[] { "a", "b", "c", "d" }); 
    HashSet<String> hash2 = new HashSet<String>(new string[] { "a", "b" }); 
    List<String> result = hash1.Except(hash2).ToList(); 
+0

或包含循环。 – 2012-08-15 03:28:25