在给定另一个列表的情况下,生成缺失元素列表的有效方法?

时间:2018-08-30 00:30:11

标签: c# list

我有一个包含元素[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#中使用更有效的方法或内置函数。

2 个答案:

答案 0 :(得分:3)

您可以尝试.ExceptDocs

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)

您可以尝试使用HashSetMSDN

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)操作。