Reputation: 2221
What is the easiest way to compare the elements of two lists say A and B with one another, and add the elements which are present in B to A only if they are not present in A?
To illustrate, Take list A = {1,2,3} list B = {3,4,5}
So after the operation AUB I want list A = {1,2,3,4,5}
Upvotes: 94
Views: 155946
Reputation: 4768
If it is two IEnumerable lists you can't use AddRange
, but you can use Concat
.
IEnumerable<int> first = new List<int>{1,1,2,3,5};
IEnumerable<int> second = new List<int>{8,13,21,34,55};
var allItems = first.Concat(second);
// 1,1,2,3,5,8,13,21,34,55
Upvotes: 1
Reputation: 30698
If it is a list, you can also use AddRange method.
var listB = new List<int>{3, 4, 5};
var listA = new List<int>{1, 2, 3, 4, 5};
listA.AddRange(listB); // listA now has elements of listB also.
If you need new list (and exclude the duplicate), you can use Union
var listB = new List<int>{3, 4, 5};
var listA = new List<int>{1, 2, 3, 4, 5};
var listFinal = listA.Union(listB);
If you need new list (and include the duplicate), you can use Concat
var listB = new List<int>{3, 4, 5};
var listA = new List<int>{1, 2, 3, 4, 5};
var listFinal = listA.Concat(listB);
If you need common items, you can use Intersect.
var listB = new List<int>{3, 4, 5};
var listA = new List<int>{1, 2, 3, 4};
var listFinal = listA.Intersect(listB); //3,4
Upvotes: 187
Reputation: 9261
Using LINQ's Union
Enumerable.Union(ListA,ListB);
or
ListA.Union(ListB);
Upvotes: 11
Reputation: 15794
I think this is all you really need to do:
var listB = new List<int>{3, 4, 5};
var listA = new List<int>{1, 2, 3, 4, 5};
var listMerged = listA.Union(listB);
Upvotes: 5
Reputation: 726599
The easiest way is to use LINQ's Union
method:
var aUb = A.Union(B).ToList();
Upvotes: 31