1

有一个List<Integer> tabulist包含值[2,0,5]。此外,还有一个List this.getRoutes()包含 keys [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

4

1 回答 1

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

于 2013-11-13T11:42:46.577 回答