我有一个包含元素[1,2,3,4,5]
的列表。
如果我还有另一个包含主列表元素(例如[1,2]
或[2,4,5]
)的列表,那么一种有效的方式来生成缺少数字的新列表,这样:
[1, 2]
使用[1,2,3,4,5]
将得到[3, 4 ,5]
[2, 4, 5]
使用[1,2,3,4,5]
将得到[1, 3]
我当时正在考虑使用嵌套的for循环进行检查,但是我想知道是否可以在C#中使用更有效的方法或内置函数。
答案 0 :(得分:3)
您可以尝试.Except
。 Docs
var list1 = new List<int> { 1, 2, 3, 4, 5 };
var list2 = new List<int> { 1, 3, 5 };
var missing = list1.Except(list2).ToList();
missing.ForEach(i => Console.Write("{0}\t", i));
>> 2 4
答案 1 :(得分:0)
您可以尝试使用HashSet
(MSDN)
var hash = new HashSet<int>(new int[] {1, 2});
var list = new List<int> {1, 2, 3, 4, 5};
var missing = list.Where(x => !hash.Contains(x)); // 3, 4, 5;
使用HashSet的好处是Contains
应该是O(1)操作。