Lua以一定方式计算表格的总值
2018-10-16 14:45:45
收藏:0
阅读:137
评论:3
local t = {1, 2, 3, 4, 5}
我需要计算表格 t 的总值,输出应该为 15。这是一个更复杂问题的简化版本,我需要以一定方式计算总值,应该像这样:
t = {1, 2, 3, 4, 5}
t = {3, 3, 4, 5} -- 第一个索引为 3,来自于 1+2(添加表格中第一个和第二个索引的值)
t = {6, 4, 5} -- 第一个索引为 6,来自于 3+3
t = {10, 5} -- 第一个索引为 10,来自于 6+4
t = {15} -- 15 = 10+5
当表格中只剩下一个值时,计算应该停止。我该如何编写代码?
到目前为止,我试过这个,但没有成功
local t = {1,2,3,4,5}
local t2 = {}
--下面的代码在循环中运行,上面的代码无法运行
table.insert(t2, t[1] + t[2])
table.remove(t, 1)
table.remove(t, 1)
for i,v in pairs(t) do
table.insert(t2, v)
end
table.insert(t, t2[1] + t2[2])
table.remove(t2, 1)
table.remove(t2, 1)
for i,v in pairs(t2) do
table.insert(t, v)
end
print(#t) -- 表格中的总值比之前更高,无法正常工作。
点赞
用户4687565
你正在循环上方创建表格。在循环内部,你只弹出并将值添加到现有表格中,但为了使你的代码正常工作,你需要在每次迭代中生成新表格。
在代码行之间放置 print(table.concat(t,', ')) 将有助于你理解发生了什么。以下是“正确”的代码
local t = {1,2,3,4,5}
local t2
while #t>1 do
t2={}
table.insert(t2, t[1] + t[2])
table.remove(t, 1)
table.remove(t, 1)
for i,v in pairs(t) do
table.insert(t2, v)
end
print('t',table.concat(t,', '))
print('t2',table.concat(t2,', '))
t={}
table.insert(t, t2[1] + t2[2])
table.remove(t2, 1)
table.remove(t2, 1)
for i,v in pairs(t2) do
table.insert(t, v)
end
print('t',table.concat(t,', '))
print('t2',table.concat(t2,', '))
end
print(t[1])
对于小问题来说可能并不重要,但一般来说,在循环中进行数组创建和复制是一种不好的风格,会导致性能下降。(尝试将 t = {1,2,3,4,5} 替换为 t={}; for i=1,1e4+1 do t[i]=i; end)。特别是,如果你大部分时间都不使用复制中的大部分元素。另外,上述代码仅在 #t 为奇数时有效。
尝试考虑不涉及创建新表格或移动大型数组尾部的替代方法。至少查看 队列指南 ,这可能比所需的更复杂的技巧。
2018-10-16 16:09:39
用户3379140
这会行吗?你可以将表的第一个值取出,并将其加到新的第一个值上。
local t = {1, 2, 3, 4, 5}
while (#t > 1) do
local first = t[1];
table.remove(t, 1);
t[1] = t[1] + first;
end
这段代码每次循环都会修改当前表,而不是创建一个新表。
2018-10-18 11:01:12
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

尝试这段代码:
local t = {1,2,3,4,5} while #t>1 do table.insert(t,1,table.remove(t,1)+table.remove(t,1)) print(t[1],#t) end这段代码在每一步中将数组向左移动两次,向右移动一次。
这里有一个更少浪费的解决方案,每步只向左移动一次:
local t = {1,2,3,4,5} while #t>1 do t[2]=t[1]+t[2] table.remove(t,1) print(t[1],#t) end