使用迭代器从List中删除元素

时间:2013-11-13 10:27:56

标签: arraylist iterator

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删除值?

1 个答案:

答案 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。 我正在使用静态方法,因为这可以在任何情况下使用,并且您不需要实例化类来执行此操作。这会增加额外不必要的代码。