基于选择插槽,将Lua表中的对象移位的最有效方式是什么?
2015-8-26 13:37:6
收藏:0
阅读:62
评论:2
我有一个对象的表格,并且用户可以在表格的任何位置选择一个对象,并将其放置在表格的另一个插槽中。当这种情况发生时,我需要表格从所选的丢弃槽位移并填充空槽。不是交换,那很容易,而是在放置点进行移位。
举个例子,如果我的表格是这样一个简化的例子:
t = {a, b, c, d, e, f}
并且用户选择了,比如说e,并想把它放到b插槽中。我该如何做:
- 将'e'放在'b'插槽中
- 将“b”到“d”的所有值向右移动,然后也填充空的“e”插槽?
- 无论选择哪一个和在表格中移动到哪里,我如何高效地处理这个移位,不管表格的大小如何?
点赞
用户2726734
以下是使用 table.move 实现 shift 的代码,它在 Lua 5.3 中是高效的,正如 @lhf 所提到的:
function shift(t, old, new)
local value = t[old]
if new < old then
table.move(t, new, old - 1, new + 1)
else
table.move(t, old + 1, new, old)
end
t[new] = value
end
2015-08-26 15:10:32
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
如果您想按照您的描述将位置为
old的项移动到位置为new,则可以使用以下代码:table.insert(t, new, table.remove(t,old))以下是一个示例:
t = {10,20,30,40,50,60} print(table.concat(t, ',')) old = 5 new = 2 table.insert(t, new, table.remove(t,old)) print(table.concat(t, ','))就效率而言,上面的代码确实会将一些元素移动两次,而这些元素本来就应该待在原处,但是这只会在表非常大时才会有所影响。
在Lua 5.3 中,您可以使用
table.move来做得更好。