【发布时间】:2011-01-23 18:52:37
【问题描述】:
如何快速将数组中的所有项目向左移动一位,并用 null 填充末尾?
例如,[0,1,2,3,4,5,6] 将变为 [1,2,3,4,5,6,null]
编辑:我说得很快,但我想我的意思是有效率。我需要在不创建列表或其他数据结构的情况下执行此操作。这是我需要在尽可能短的时间内完成数十万次的事情。
【问题讨论】:
-
您上面的示例不是“移位” - 移位意味着删除数组中的第一个元素,您希望从任何索引中删除。
-
如果你需要做几十万次,你可能使用了错误的数据结构。
-
尽管有编译器指令,队列实际上比数组快。队列维护开始和结束指针,因此它可以在 O(1) 时间内移除第一个元素(或最后一个元素)(相对于数组的 O(n))。如果要从中间删除值,那么链表会更好,但这会改变其他操作的复杂性。
-
去向:呵呵。 “还有什么比数组更快?!”……好吧,在这种情况下是链表……但是,我将不得不在这里扮演魔鬼的拥护者并问“如果数组中只有 100 个项目,它真的需要多快?这是您的应用程序的瓶颈吗?”。除非你在做一些对性能很重要的事情,否则不要再关心了。如果您正在做一些性能关键的事情,那么让我们看看一些探查器数字吗?
-
在您的示例中,您要求移动数组的元素。但是,选择的答案会将您的数组视为不可变的并创建一个新的...由于需要调用分配器,因此速度较慢。
标签: c# arrays performance