首页 > 解决方案 > lua_rotate 是做什么的?

问题描述

Lua5.3引入了新的c api lua_rotate:https://www.lua.org/manual/5.3/manual.html#lua_rotate

在有效索引 idx 和堆栈顶部之间旋转堆栈元素。元素在顶部方向旋转 n 个位置,对于正 n,或在底部方向旋转 -n 个位置,对于负 n。n 的绝对值不能大于被旋转的切片的大小。

无法理解 lua_rotate 的工作原理,尤其是上面的粗体字,需要帮助!

标签: lualua-c++-connection

解决方案


堆栈基本上是一个数组,是按明确定义的顺序排列的线性元素序列。因此,假设我们有一个字符数组,如下所示(从 1 开始的索引在元素上方):

1 2 3 4 5 6 
A Q Z G N K

“旋转”是计算机科学中对元素序列的常见操作,很像“移位”或“排序”等(这就是为什么 Lua 手册不费心去详细说明“旋转”的含义元素)。将此数组向左或向右旋转某个数字N意味着将所有元素向左/向右移动N元素,并将从数组末尾移出的元素按顺序放置在新的空部分中。

因此,如果我们将上述数组右旋 2,您将得到以下结果:

1 2 3 4 5 6
N K A Q Z G

原来的元素1-4变成了元素3-6,原来的元素5-6变成了新版本的1-2。左旋转的工作原理类似。

旋转数组的一部分仅意味着执行此操作,但不理会数组的其他部分。因此,如果您采用上面的原始数组,并左旋转 3 个元素,但只影响元素 3-6,您会得到以下结果:

1 2 3 4 5 6
A Q K Z G N

推荐阅读