关于如何从另一个列表中排除一个列表的项目,我有一个相当具体的问题。诸如 except() 之类的常见方法不会这样做,原因如下:
- 如果列表中的重复项具有“偶数”索引 - 我需要删除 THIS 元素和它之后的 NEXT 元素。
- 如果列表中的重复项有一个“奇数”索引 - 我需要删除这个元素和一个元素之前**它。
- 一个列表中可能会出现多次相同的重复项。即一个可能带有“奇数”索引,另一个可能是“偶数”。
我不是在寻求解决方案,因为我自己创建了一个。然而,在多次执行此方法后 - “ANTS 性能分析器”显示该方法经过了整个执行时间的 75%(40 秒中的 30 秒)。问题是:是否有更快的方法来执行相同的操作?我试图优化我当前的代码,但它仍然缺乏性能。这里是:
private void removedoubles(List<int> exclude, List<int> listcopy)
{
for (int j = 0; j < exclude.Count(); j++)
{
for (int i = 0; i < listcopy.Count(); i++)
{
if (listcopy[i] == exclude[j])
{
if (i % 2 == 0) // even
{
//listcopy.RemoveRange(i, i + 1);
listcopy.RemoveAt(i);
listcopy.RemoveAt(i);
i = i - 1;
}
else //odd
{
//listcopy.RemoveRange(i - 1, i);
listcopy.RemoveAt(i - 1);
listcopy.RemoveAt(i - 1);
i = i - 2;
}
}
}
}
}
在哪里:
- exclude - 仅包含重复项的列表。此列表最多可能包含 30 个元素。
- listcopy - 应检查重复的列表。如果发现“排除”中的重复项 -> 执行删除操作。此列表最多可能包含 2000 个元素。
我认为 LINQ 可能会有所帮助,但我不太了解它的语法。