【问题标题】:Delete elements from a List using iterator使用迭代器从列表中删除元素
【发布时间】:2013-11-25 21:49:25
【问题描述】:

有一个 List<Integer> tabulist 包含值 [2,0,5]。 此外,还有一个List this.getRoutes(),其中包含密钥[0,1,2,3,4,5]。 我需要从this.getRoutes() 中删除元素[2,0,5]。 因此,我必须在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 中删除值?

【问题讨论】:

  • routes = this.getRoutes(); routes.removeAll(tabulist) 有什么问题?
  • @raina77ow 因为 List 路由包含 Route 类的对象。我需要删除键“rKey”上的对象。 6个对象中“rKey”的值是[0,1,2,3,4,5]。所以,我需要删除那些“rKey”等于[2,0,5](tablist)的对象。
  • 我不知道为什么迭代器不前进,但是你为什么不创建一个接受两个参数的函数:originalValues 和 valuesToRemove?在这个方法中创建一个新的结果 List 并且只用你想要的值填充它。
  • @Sigur:你能举个例子吗?

标签: arraylist iterator


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2019-09-11
    • 2018-07-18
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多