2011-11-19 4 views

답변

16

1 오프, 뭔가 같은 : 다음

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

: 당신이 정기적으로 수행하는 경우

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

, 어쩌면 비슷한 반복자 블록이 모든 값을 산출하는 방법 :

foreach(var val in list.Reverse()) { 
    // use val 
} 
+1

나는 LinkedList '는'IEnumerable '이므로, Linq를 사용한다면'IEnumerable .Reverse()'를 선택합니다. 정말 짧은 목록만으로 충분할 수 있습니다. 긴 목록의 경우이 대답의 접근 방식이 더 효율적입니다. –

+0

@MatthewStrawbridge 'using'을 통해 둘 다 사용할 수있는 경우 우선 순위는 어느 것입니까? 더 구체적인 것? –

+0

@ EugenDück 예, 'LinkedList '에 대한 구체적인 설명이 우선합니다. 하지만 * 무료 * IEnumerable 버전의 성능이 충분하다면 다른 버전을 구현할 필요가 없습니다. –

관련 문제