问题:我有一个整数列表,我想获取存在两次或多次的数字。
List<int> firstList = new List<int> { 1, 1, 3 };
预期结果:
{ 1 }
这可以用 LINQ 轻松完成。例如这个
var result = firstList.Where(c => firstList.Count(d => c == d) > 1).Distinct();
问题是这会进行不止一次的迭代。使用正常的 for 循环,我们可以达到 O(N)..
List<int> result = new List<int>();
HashSet<int> doubles = new HashSet<int>();
foreach (var v in firstList)
{
if (!doubles.Contains(v))
doubles.Add(v);
else
result.Add(v);
}
这就是我们想要用 linq aswel 做的事情......
HashSet<int> doubles = new HashSet<int>();
var result = firstList.Where((c) => doubles.Contains(c) ? true : !doubles.Add(c)).ToList();
这是我唯一能想到的方法。。
问题:
有什么方法可以在 LINQ 中声明我的“新 HashSet”。我在想像firstList.Aggregate((c, d = new HashSet<int>) =>
..