Lua: 在数组中拖动一系列元素
2015-9-12 8:40:35
收藏:0
阅读:71
评论:2
我正在尝试创建一个函数,该函数可以将一系列连续的元素“拖动”到数组中的新位置,限制为数组的当前大小。其他项应该在“拖拉”项周围晃动。
例如,如果我的数组有7个元素,我想拖动中间的三个...
1, 2, 3, 4, 5, 6, 7 <-- 键
a, b, C, D, E, f, g <-- 值
大写字母是我想要“拖动”的字母。如果我拖动到数组的开头(拖到1),则数组将如下所示:
1, 2, 3, 4, 5, 6, 7 <-- 键
C, D, E, a, b, f, g <-- 值
如果我拖到位置5(或以上-无法拖动到当前数组大小之外),则数组将如下所示:
1, 2, 3, 4, 5, 6, 7 <-- 键
a, b, f, g, C, D, E <-- 值
有什么办法可以用Lua实现这一目标而不显得太复杂?
点赞
用户2726734
以下是使用 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
2015-08-26 17:13:45
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
function drag(t, src, len, dest) if len == 0 then return end local left, ctr, start, index, elem = math.min(src, dest), 0, 0 local rot, size = dest - src, src + dest + len - 2 * left repeat start, index, elem = start + 1, start, t[left + start] repeat index = (index + rot) % size ctr, t[left + index], elem = ctr + 1, elem, t[left + index] until index < start until ctr == size end for K = 1, 5 do local tbl = {'a', 'b', 'C', 'D', 'E', 'f', 'g'} drag(tbl, 3, 3, K) print(table.concat(tbl)) end函数
drag(t,src,len,dest)实现了将表t中从索引src开始长为len的一段取出来,然后插入到以索引dest为起始的位置上,其它元素向前或向后平移以保证整个表长不变且元素不重复。for循环遍历了 1 到 5 这 5 个数字,每次都对同一个表进行以上操作,然后将操作后的表输出。