我正在尝试创建一个函数,将一系列连续元素“拖动”到数组中的新位置,约束到数组的当前大小.其他项目应围绕“拖动”项目摇摆. 例如,如果我的数组有7个元素,我想拖动中间三个…
例如,如果我的数组有7个元素,我想拖动中间三个…
1, 2, 3, 4, 5, 6, 7 <-- keys a, b, C, D, E, f, g <-- values
大写字母是我想要“拖动”的字符.如果我拖动到数组的开头(拖动到1),数组将如下所示:
1, 2, 3, 4, 5, 6, 7 <-- keys C, D, E, a, b, f, g <-- values
如果我拖动到位置5(或上面 – 不能拖动到当前数组大小之外),数组将如下所示:
1, 2, 3, 4, 5, 6, 7 <-- keys a, b, f, g, C, D, E <-- values
知道如何使用Lua以非狡猾的方式实现这一目标吗?
这是在Lua 5.3中使用table.move
的版本.
它将要拖动的组复制到另一个表中,并向上或向下移动值以为该组腾出空间.
function drag(t, src, len, dest) local copy = table.move(t, src, src + len - 1, 1, {}) if src >= dest then table.move(t, dest, src - 1, dest + len) else table.move(t, src + len, dest + len - 1, src) end table.move(copy, 1, len, dest, t) end