Reputation: 5771
I have 2 Lists of type string:
Now I need to compare both lists and remove the duplicated items from List1
. The modified List1
should have just one item, which is "item1".
foreach loops may work, but what I want to know is there any inbuilt method which does this?
Thanks for the answers guys. I was just thinking what would be the case if I wanted to add the missed out items into the List. So just raised another question similar to this.
TIA!
Upvotes: 2
Views: 338
Reputation: 1062620
I suspect the best approach to use here would be to put the second list into a hash first, i.e.
var hash = new HashSet<TheType>(List2);
List1.RemoveAll(hash.Contains);
This avoids having O(n*m) performance, instead being O(n+m)
Example:
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}
Upvotes: 10
Reputation: 1500105
You could use:
list1.RemoveAll(item => list2.Contains(item));
(As Marc says, this is O(N*M) - fine if you expect the lists to be very short, but awful if either of them could get big.)
Or if you don't mind it being a new list (rather than modifying the existing one), you could just use:
list1 = list1.Except(list2).ToList();
Upvotes: 10