我试图将一个列表的每个值与另一个列表的每个值进行比较,然后删除所有匹配的值,并且当前有此代码。
foreach (item s in List1)
{
for (int i = 0; i < list2.count; i++)
{
if (list2.ElementAt(i)==s)
{
list2.Remove(list2.ElementAt(i));
continue;
}
}
}
必须有一种更快或者至少是一种不太强烈的方法来执行这样的比较。需要更快的方法,因为这可以用于比较每个超过1000个值的列表。任何帮助都会有很大帮助
答案 0 :(得分:1)
使用Except
,它使用默认相等比较器产生两个序列的差异。
除了扩展方法使用HashSet<T>
,它在LookUp中产生O(1)
访问权。
list2 = list2.Except(list1).ToList();
答案 1 :(得分:0)
您要删除list2
中包含的list1
中的所有元素。一种有效的方法是创建一个HashSet
,它将包含对list1
中每个对象的引用,因为针对HashSet的查找速度非常快。然后迭代list2
中的每个元素,但顺序相反。这很重要,因为您要删除元素。尝试这样的事情:
List<MyObjType> list1 = new List<MyObjType>();
List<MyObjType> list2 = new List<MyObjType>();
HashSet<MyObjType> list1Hashset = new HashSet<MyObjType>(list1);
for (int i = list2.Count - 1; i >= 0; i--)
{
if (list1Hashset.Contains(list2[i]))
list2.RemoveAt(i);
}