Как можно инвертировать пересечение через набор C#?

Действительно ли возможно иметь a foreach оператор, который пересечет через объект Наборов в обратном порядке?

Если не a foreach оператор, там иначе?

11
задан Peter Mortensen 14 April 2015 в 13:01
поделиться

5 ответов

Вы можете просто вызвать Reverse () для коллекции.

foreach(var item in collection.Reverse()) { ... }
7
ответ дан 3 December 2019 в 01:38
поделиться

Если вы используете 3.5, похоже, в LINQ есть метод Reverse (). Это не будет повторяться в обратном порядке, но полностью перевернет весь список, после чего вы можете выполнить свой foreach.

Или вы можете использовать простой оператор for:

for(int i = list.Count -1; i >= 0; --i)
{
   x = list[i];
}
4
ответ дан 3 December 2019 в 01:38
поделиться

В качестве альтернативы, если коллекция является IEnumerable и, следовательно, без произвольного доступа, используйте метод IEnumerable.Reverse () System.Linq и примените forearch как обычно.

using System.Linq;

foreach (var c in collection.Reverse()) {
}
4
ответ дан 3 December 2019 в 01:38
поделиться

Вы можете использовать обычный цикл для в обратном направлении, например:

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

Вы также можете использовать LINQ:

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

Однако нормальный для ] цикл, вероятно, будет немного быстрее.

21
ответ дан 3 December 2019 в 01:38
поделиться
        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 for .NET 3.5/4.0

2
ответ дан 3 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: