在 Javascript 中,将数组的最后一个元素带到开头的最紧凑、优雅和高效的方法是什么?
In Javascript, what is the most compact, elegant and efficent way to bring the last element of an array to the beginning?
我正在编写贪吃蛇游戏
蛇的运动逻辑决定了如果我有一个 Javascript 数组
var links = [elem_0, elem_1, ..., elem_n];
个表示蛇链接的元素,那么蛇的移动方式是弹出elem_n
,将其位置改为elem_0
加上翻译单元dx
和dy
,然后放在数组的开头:
[elem_0, elem_1, ..., elem_n]
---> [elem_n, elem_0, ..., elem_(n-1)]
(在此过程中更改了 elem_n
的一些内部属性)
在
之间不妥协的方法是什么?
- 在操作数和内存使用方面效率最高
- 可读
- 可维护
- 聪明(可选)
- 优雅
- 紧凑
????
optimally efficient in number of operations and memory usage
您要求进行两项通常相互抵消的优化。例如更快的速度 == 更多的内存。
也就是说,我可能会选择 a (doubly) linked list 来存储我的蛇,因为在前端或尾部移除或添加非常便宜,而且对于游戏来说,更快比更少的内存更可取(在合理范围内,但我想知道在你 运行 出现内存问题之前你的蛇需要多长时间......远远超出可玩的范围......还有一些)。
当然,我假设您已经测量并发现基于标准数组的方法太慢(似乎不太可能)。
对于从 ES3 开始的任何 Javascript 版本:
links.unshift(links.pop());
您可以通过两种方式旋转数组:
links.unshift(links.pop()); or
links.push(links.shift());
第一种方法解决了你的问题。
我正在编写贪吃蛇游戏
蛇的运动逻辑决定了如果我有一个 Javascript 数组
var links = [elem_0, elem_1, ..., elem_n];
个表示蛇链接的元素,那么蛇的移动方式是弹出elem_n
,将其位置改为elem_0
加上翻译单元dx
和dy
,然后放在数组的开头:
[elem_0, elem_1, ..., elem_n]
---> [elem_n, elem_0, ..., elem_(n-1)]
(在此过程中更改了 elem_n
的一些内部属性)
在
之间不妥协的方法是什么?- 在操作数和内存使用方面效率最高
- 可读
- 可维护
- 聪明(可选)
- 优雅
- 紧凑
????
optimally efficient in number of operations and memory usage
您要求进行两项通常相互抵消的优化。例如更快的速度 == 更多的内存。
也就是说,我可能会选择 a (doubly) linked list 来存储我的蛇,因为在前端或尾部移除或添加非常便宜,而且对于游戏来说,更快比更少的内存更可取(在合理范围内,但我想知道在你 运行 出现内存问题之前你的蛇需要多长时间......远远超出可玩的范围......还有一些)。
当然,我假设您已经测量并发现基于标准数组的方法太慢(似乎不太可能)。
对于从 ES3 开始的任何 Javascript 版本:
links.unshift(links.pop());
您可以通过两种方式旋转数组:
links.unshift(links.pop()); or
links.push(links.shift());
第一种方法解决了你的问题。