Sandeep
Sandeep

Reputation: 5771

Removal operation in List<string>

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?

EDIT

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.

Add operation in List<string>

TIA!

Upvotes: 2

Views: 338

Answers (4)

Pierluc SS
Pierluc SS

Reputation: 3176

I recommend using:

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

Upvotes: 1

Nikhil Agrawal
Nikhil Agrawal

Reputation: 48558

Use

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

Upvotes: 3

Marc Gravell
Marc Gravell

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

Jon Skeet
Jon Skeet

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

Related Questions