7
C#LinkedList
を使用して、次のC++スニペットと同等の処理を行うにはどうすればよいですか?C#LinkedListを逆順にトラバースする方法
std::list<MyClass*>::reverse_iterator itr(it);
for(; itr != MyList.rend(); ++itr)
C#LinkedList
を使用して、次のC++スニペットと同等の処理を行うにはどうすればよいですか?C#LinkedListを逆順にトラバースする方法
std::list<MyClass*>::reverse_iterator itr(it);
for(; itr != MyList.rend(); ++itr)
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
}
「LinkedList 'は' IEnumerable 'なので、Linqを使用している場合は' IEnumerable .Reverse() 'をピックアップします。それは本当に短いリストで十分かもしれません。長いリストについては、この答えのアプローチがより効率的になります。 –
@MatthewStrawbridgeどちらも「使用」経由で利用できる場合はどちらが優先されますか?より具体的なものは? –
@EugenDückはい、より具体的なもの(すなわち、 'LinkedList')が優先されます。しかし*あなたが無料で入手できる 'IEnumerable 'バージョンの性能が十分であれば、もう片方を実装する必要はありません。 –