Как пройти C # LinkedList в обратном порядке - PullRequest
7 голосов
/ 19 ноября 2011

Как я могу сделать эквивалент следующего фрагмента C ++, используя C # LinkedList?

std::list<MyClass*>::reverse_iterator itr(it); 
for(; itr != MyList.rend(); ++itr)

1 Ответ

16 голосов
/ 19 ноября 2011

Как 1-off, что-то вроде:

var el = list.Last;
while (el != null) {
    // use el.Value
    el = el.Previous;
}

Если вы делаете это регулярно, возможно, аналогичный блок итератора выдает все значения:

public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) {
    var el = list.Last;
    while (el != null) {
        yield return el.Value;
        el = el.Previous;
    }
}

тогда:

foreach(var val in list.Reverse()) {
    // use val
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...