如何从c#中的另一个列表中删除列表中的不同项目?
答案 0 :(得分:2)
你可以这样使用Except
:
var result = list2.Except(list1).ToList();
所以一个例子是:
List<int> a = new List<int>() { 1, 2, 3, 4, 5 };
List<int> b = new List<int>() { 1, 2, 3, 4 };
List<int> c = a.Except(b).ToList();
其中列表C的值只有5。
答案 1 :(得分:1)
不像使用Except(我从来不知道存在)那么优雅......但是这样可行:
List<string> listA = new List<string>();
List<string> listB = new List<string>();
listA.Add("A");
listA.Add("B");
listA.Add("C");
listA.Add("D");
listB.Add("B");
listB.Add("D");
for (int i = listA.Count - 1; i >= 0; --i)
{
int matchingIndex = listB.LastIndexOf(listA[i]);
if (matchingIndex != -1)
listB.RemoveAt(matchingIndex);
}
答案 2 :(得分:0)
var distinctItems = items.Distinct();
不完全符合您的要求,但通过复制您要保留的项目来创建新列表要比编辑原始列表容易得多。
如果要控制列表项的“相等”构成,请调用接受IEqualityComparer<T>
实例的重载。
请参阅MSDN。