Foreach Inversly - PullRequest
       12

Foreach Inversly

3 голосов
/ 03 июля 2011

Есть ли способ заставить foreach перебирать коллекцию от конца до начала?

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
    foreach (int i in fibarray)
    {
        System.Console.WriteLine(i);
    }

Как отобразить обратно с foreach?

Ответы [ 7 ]

4 голосов
/ 03 июля 2011
using System.Linq;

foreach (int i in fibArray.Reverse())

Но обычный цикл for будет более эффективным:

for( int index = fibArray.Length - 1; index >= 0; --index ) {
    int i = fibArray[index];
    ...
}
4 голосов
/ 03 июля 2011

Вы можете использовать Reverse():

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
foreach (int i in fibarray.Reverse())
{
    System.Console.WriteLine(i);
}

В общем случае foreach должен поддерживать любые IEnumerable, которые поддерживают только прямое перечисление элементов в коллекции, в качестве альтернативы Reverse() вы можете написать свою собственную оптимизированную реализацию, которая работает на IList, который предоставляет индексатор .

2 голосов
/ 03 июля 2011
foreach (int i in fibarray.Reverse<int>())
{
    System.Console.WriteLine(i);
}
0 голосов
/ 03 июля 2011

Короче, нет.Вы не можете изменить поведение foreach.Если вы хотите сделать это, не возвращая новый массив (например, вызов Reverse), используйте цикл for.

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
for (int i = fibarray.Length - 1; i > -1; i--) {
    Console.WriteLine(i);
}
0 голосов
/ 03 июля 2011

Я не думаю, что это возможно по умолчанию.Вам нужно создать свой собственный класс с итератором с такой возможностью:

C # .NET Iterator Пример: обратная итерация

0 голосов
/ 03 июля 2011

Enumerable.Reverse ()

foreach (int i in fibarray.Reverse)
    System.Console.Writeline(i);
0 голосов
/ 03 июля 2011

Неа. Вместо этого используйте for или измените коллекцию в нужном порядке перед повторением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...