13

foreachCollections オブジェクトを逆の順序でトラバースするステートメントを持つことは可能ですか?

foreach声明ではない場合、別の方法はありますか?

4

5 に答える 5

27

次のように、通常のforループを逆方向に使用できます。

for (int i = collection.Count - 1; i >= 0 ; i--) {
    var current = collection[i];
    //Do things
}

LINQ を使用することもできます。

foreach(var current in collection.Reverse()) {
    //Do things
}

ただし、通常のforループはおそらく少し高速になります。

于 2010-06-16T18:36:59.983 に答える
7

コレクションでReverse()を呼び出すだけです。

foreach(var item in collection.Reverse()) { ... }
于 2010-06-16T18:38:42.410 に答える
5

3.5 を使用している場合、LINQ に Reverse() メソッドがあるように見えます。これは逆の順序で繰り返されるのではなく、リスト全体を逆にするため、foreach を実行できます。

または、単純な for ステートメントを使用できます。

for(int i = list.Count -1; i >= 0; --i)
{
   x = list[i];
}
于 2010-06-16T18:37:04.047 に答える
4

または、コレクションが IEnumerable であり、ランダム アクセスがない場合は、System.Linq の IEnumerable.Reverse() メソッドを使用して、通常どおり forarch を適用します。

using System.Linq;

foreach (var c in collection.Reverse()) {
}
于 2010-06-16T18:45:07.000 に答える
2
        List<string> items = new List<string> 
        { 
            "item 1", 
            "item 2",
            "item 3", 
            "item 4", 
        };
        lines.AsEnumerable().Reverse()
                            .Do(a => Console.WriteLine(a), ex => Console.WriteLine(ex.Message), () => Console.WriteLine("Completed"))
                            .Run();           

.NET 3.5/4.0 のリアクティブ拡張

于 2010-06-17T05:14:07.683 に答える