【发布时间】:2020-02-21 08:24:02
【问题描述】:
我有一些我想遍历的列表,有时从头到尾,有时从头到尾。这个列表永远不会被修改,我会多次遍历它。当我想从头到尾迭代时,我想避免在 O(n) 中反转列表的操作。
是否有一些数据结构允许这样做?
我认为 C# 中的(双重)LinkedList 实现允许这种行为很简单(通过保持列表开头的内部引用),但我不认为它是这样实现的大大地。如果我错了,你能提供一个链接吗?
【问题讨论】:
-
您可以使用数组向前和向后迭代。
-
就此而言,您可以向前和向后迭代任何内容,只要它具有完整的键控索引器和
Count字段。 -
显然没有涵盖所有可能性,但reverse foreach 问题中有大量列表/数组示例...
-
你能告诉你在找到这样一个结构时遇到了什么麻烦吗?比如Array、List等为什么不适合?
-
大多数时候,您可以简单地保留一个布尔值
curOrder,然后在迭代时使用它来选择a[i]或a[n-i-1]。在更复杂的情况下(例如,反转多个子段),有时可以使用陷阱。
标签: c# list data-structures reverse