List<Integer> tabulist
包含值[2,0,5]
。
此外,还有一个List this.getRoutes()
,其中包含密钥[0,1,2,3,4,5]
。
我需要从[2,0,5]
删除元素this.getRoutes()
。
因此,我必须在this.getRoutes()
中获得以下条目:
[1,3,4]
这是我的代码:
iter = this.getRoutes().iterator();
while(iter.hasNext())
{
Route r = iter.next();
if (tabulist.contains(r.getRouteKey()))
{
iter.remove();
}
}
问题是r.getRouteKey()
始终为0.因此,我总是删除this.getRoutes()
中的第一个元素。我不明白为什么迭代器不会移动到[1,2,3,4,5]。
如何解决这个问题?也许我还应该从tabulist
删除值?
答案 0 :(得分:1)
我没有测试我的代码,但这里有3个主题变体。如果我犯了错误,你应该测试它们,但是他们会想出一般的想法。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Class1
{
public static List<int> RemoveItems1(List<int> OriginalValues, List<int> ValuesToRemove)
{
List<int> result = new List<int>();
foreach (object item_loopVariable in OriginalValues) {
item = item_loopVariable;
if ((!ValuesToRemove.Contains(item))) {
result.Add(item);
}
}
return result;
}
public static List<int> RemoveItems2(List<int> OriginalValues, List<int> ValuesToRemove)
{
List<int> result = OriginalValues;
foreach (object item_loopVariable in ValuesToRemove) {
item = item_loopVariable;
if ((OriginalValues.Contains(item))) {
result.Remove(item);
}
}
return result;
}
public static List<int> RemoveItems3(List<int> OriginalValues, List<int> ValuesToRemove)
{
List<int> result = OriginalValues;
foreach (object item_loopVariable in from item1 in ValuesToRemovewhere (OriginalValues.Contains(item1))) {
item = item_loopVariable;
result.Remove(item);
}
return result;
}
}
第一个只添加元素以获得结果。就像我在评论中说的那样。 第二个从设置为参数Originalvalues的结果中删除元素。最后一个与第二个基本相同,但使用LINQ。 我正在使用静态方法,因为这可以在任何情况下使用,并且您不需要实例化类来执行此操作。这会增加额外不必要的代码。