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;
}
}

最初のものは、要素のみを追加して結果を取得します。私のコメントで言ったように。2 つ目は、パラメーター Originalvalues に設定されている結果から要素を削除します。最後の 1 つは基本的に 2 と同じですが、LINQ を使用します。これはどのような状況でも使用でき、これを行うためにクラスをインスタンス化する必要がないため、静的メソッドを使用しています。これにより、余分な不要なコードが追加されます。

于 2013-11-13T11:42:46.577 に答える