Как вы можете выполнить обратный ход через коллекцию С#?
Возможно ли иметь оператор foreach
, который будет проходить через объект Collections в обратном порядке?
Если нет инструкции foreach
, есть ли другой способ?
Ответы
Ответ 1
Вы можете использовать обычный цикл 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
, вероятно, будет немного быстрее.
Ответ 2
Вы можете просто вызвать Reverse() в коллекции.
foreach(var item in collection.Reverse()) { ... }
Ответ 3
Если вы используете 3.5, похоже, что в LINQ есть метод Reverse()
Это не будет повторяться в обратном порядке, но изменит весь список, тогда вы можете сделать свой прогиб.
Или вы можете использовать простой для оператора:
for(int i = list.Count -1; i >= 0; --i)
{
x = list[i];
}
Ответ 4
В качестве альтернативы, если коллекция IEnumerable и, следовательно, без произвольного доступа, используйте метод System.Linq IEnumerable.Reverse() и применяйте forearch как обычно.
using System.Linq;
foreach (var c in collection.Reverse()) {
}
Ответ 5
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();
Reactive Extension для .NET 3.5/4.0