LUA - 数组管理(添加/删除元素)
2019-10-20 18:7:49
收藏:0
阅读:263
评论:1
我有两个数组:
A={4,8,12}
B={1,2,3,5,6,7,9,10,11}
这些代码的本质是,在调用函数时,从数组B中取一个随机值,按顺序将其插入数组A中,并在另一个循环中从数组B中删除该随机值。
local function Change ()
local q= math.random(1, #B)
for i = 1, #A do
if B[q]<A[i] then
for t=#A, i, -1 do
A[t+1]=A[t]
end
A[i]=B[q]
break
end
end
while q<= #B-1 do
B[q]=B[q+1]
q=q+1
end
B[q]=nil
for x = 1, #A do print ("当前:", A[x]) end
for y = 1, #B do print ("空闲:", B[y]) end
end
现在我想使用同样的代码,解决相反的问题 - 从数组A中取一个随机值,按顺序将其插入数组B中,然后从数组A中删除该值。
所以我想要这样做:
Change (A, B) – 从B中查找随机值并插入A(数组)
Change (B, A) – 从A中查找随机值并插入B(数组)
在Lua中是否有任何方法可以做到这一点? 指针或其他方式...
附言:我不想使用“table.sort/table.insert”等来完成此任务。
附言2:我们在帖子中使用指针找到了解决方案,但是今天我找到了另一种解决方案:
C={{4,8,12},{1,2,3,5,6,7,9,10,11}}
Local function Change (x,y)
a= math.random(1, #C[y])
for i = 1, #C[x] do
if C[y][a]<C[x][i] then
for t=#C[x], i, -1 do
C[x][t+1]=C[x][t]
end
C[x][i]=C[y][a]
break
end
end
while a<= #C[y]-1 do
C[y][a]=C[y][a+1]
a=a+1
end
C[y][a]=nil
for i = 1, #C[x] do print ("在C"..x, C[x][i]) end
for i = 1, #C[y] do print ("在C"..y, C[y][i]) end
end
并调用Change(1,2)或Change(2,1)。
你认为哪种方法的性能更好?
还有一个关于LUA语法的问题
当我使用以下代码:
C={ A={4,8,12}, B={1,2,3,5,6,7,9,10,11} }
并尝试在函数中使用#C[1]或#C[2]时,我得到错误“尝试获取字段'?'(空值)的长度”。但写C.A或C.B而不是C[1]、C[2]在代码中更清晰。
我不得不像这样进行初始化:
A={4,8,12}, B={1,2,3,5,6,7,9,10,11}, C={A,B}
但在使用C.A或C.B时出现其他错误“尝试获取字段'C'(空值)的长度”。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

在 Lua 中,只有当放置在变量中时,表格才会共享。
mytable = {1,2,3} newtable = mytable newtable[1] = "one" print(mytable[1]) --> 输出:"one"所以在你的代码中,我们可以将硬编码的表格改为变量:
local function Change(insertTable, valueTable) local q = math.random(1, #valueTable) for i = 1, #insertTable do if valueTable[q] < insertTable[i] then for t = #insertTable, i, -1 do insertTable[t+1] = insertTable[t] end insertTable[i] = valueTable[q] break end end while q <= #valueTable-1 do valueTable[q] = valueTable[q+1] q = q+1 end valueTable[q] = nil for x = 1, #insertTable do print("Current: ", insertTable[x]) end for y = 1, #valueTable do print("Free: ", valueTable[y]) end end