我有两个排序列表如下:
var list1 = new List<int>() { 1, 1, 1, 2, 3 };
var list2 = new List<int>() { 1, 1, 2, 2, 4 };
Run Code Online (Sandbox Code Playgroud)
我希望输出为: {1, 1, 2}
如何在C#中做到这一点?有没有办法使用Linq?
Mah*_*mal 43
用途Intersect:
var commonElements = list1.Intersect(list2).ToList();
Run Code Online (Sandbox Code Playgroud)
额外1表示您无法使用,Intersect因为它返回一组.
这里有一些代码可以满足您的需求:
var list1 = new List<int>() { 1, 1, 1, 2, 3 };
var list2 = new List<int>() { 1, 1, 2, 2, 4 };
var grouped1 =
from n in list1
group n by n
into g
select new {g.Key, Count = g.Count()};
var grouped2 =
from n in list2
group n by n
into g
select new {g.Key, Count = g.Count()};
var joined =
from b in grouped2
join a in grouped1 on b.Key equals a.Key
select new {b.Key, Count = Math.Min(b.Count, a.Count)};
var result = joined.SelectMany(a => Enumerable.Repeat(a.Key, a.Count));
CollectionAssert.AreEquivalent(new[] {1, 1, 2}, result);
Run Code Online (Sandbox Code Playgroud)