我有两个类型字符串列表:
现在我需要比较两个列表并从List1
中删除重复的项目。修改后的List1
应该只有一个项目,即“item1”。
foreach循环可能有用,但我想知道的是有没有内置的方法来做到这一点?
谢谢你的回答。我只是在考虑如果我想将遗漏的项目添加到列表中会是什么情况。所以刚刚提出了另一个类似的问题。
TIA!
答案 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();