2011-11-19 41 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どちらも「使用」経由で利用できる場合はどちらが優先されますか?より具体的なものは? –

+0

@EugenDückはい、より具体的なもの(すなわち、 'LinkedList ')が優先されます。しかし*あなたが無料で入手できる 'IEnumerable 'バージョンの性能が十分であれば、もう片方を実装する必要はありません。 –

関連する問題