我该如何使用C#的LinkedList
来实现与下面这段C++代码等效的功能?
std::list<MyClass*>::reverse_iterator itr(it);
for(; itr != MyList.rend(); ++itr)
我该如何使用C#的LinkedList
来实现与下面这段C++代码等效的功能?
std::list<MyClass*>::reverse_iterator itr(it);
for(; itr != MyList.rend(); ++itr)
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
}
for (var el = list.Last; el != null; el = el.Previous)
{
// use el.Value
}
LinkedList<T>
是IEnumerable<T>
,因此如果您使用 Linq,它会使用IEnumerable<T>.Reverse()
。对于非常短的列表,这可能已经足够了。对于较长的列表,这个答案中的方法将更加高效。 - Matthew StrawbridgeReverse
改成ReverseIteration
或者其他什么名字,这样就能避免误用LINQ的Reverse
操作符了。有趣的是,你的操作符和LINQ的操作符在性能上没有太大的区别。唯一能观察到的区别就是LINQ的Reverse
分配了更多的内存。 - undefined