List <string> </string>中的删除操作

时间:2012-08-03 13:28:35

标签: c# string

我有两个类型字符串列表:

  • List1包含项目 - item1,item2,item3
  • List2有项目 - item2,item3

现在我需要比较两个列表并从List1中删除重复的项目。修改后的List1应该只有一个项目,即“item1”。

foreach循环可能有用,但我想知道的是有没有内置的方法来做到这一点?

修改

谢谢你的回答。我只是在考虑如果我想将遗漏的项目添加到列表中会是什么情况。所以刚刚提出了另一个类似的问题。

Add operation in List<string>

TIA!

4 个答案:

答案 0 :(得分:10)

您可以使用:

list1.RemoveAll(item => list2.Contains(item));

(正如Marc所说,这是O(N * M) - 如果您希望列表非常短,那就没问题了,但如果其中任何一个列表变得很大,那就太糟糕了。)

或者,如果您不介意它是 new 列表(而不是修改现有列表),您可以使用:

list1 = list1.Except(list2).ToList();

答案 1 :(得分:10)

我怀疑这里使用的最佳方法是先将第二个列表放入哈希值,即

var hash = new HashSet<TheType>(List2);
List1.RemoveAll(hash.Contains);

这避免了O(n * m)性能,而是O(n + m)

示例:

List<int> List1 = new List<int> {1,2,3};
List<int> List2 = new List<int> {2,3};

var hash = new HashSet<int>(List2);
List1.RemoveAll(hash.Contains);
// now List1 just has {1}

答案 2 :(得分:3)

使用

List1 = List1.Except(List2).ToList();

答案 3 :(得分:1)

我建议使用:

List1 = List1.Except(List2).ToList();