将表格元素复制到新表格
2016-6-1 14:26:11
收藏:0
阅读:74
评论:2
我有一个表格,用于保存用户收集的信息,并以以下格式填充:
TempTable = {}
TempTable["date"] = {day, month, year}
TempTable["name"] = "Name Here"
TempTable["address"] = "Address Here"
etc
然后我有一个主表格,将保存所有收集的信息
MainTable = {}
MainTable[1] = { date = {day, month, year}, name = "Name Here", address = "Address Here" }
MainTable[2] = { date = {day, month, year}, name = "Name Here", address = "Address Here" }
我还很新Lua,所以在将TempTable复制到MainTable时遇到了一些麻烦。
如果这是一个重复的问题,对不起,我在创建此问题之前检查了许多类似的线程。
编辑:我已尝试MainTable[i] = TempTable和table.insert(MainTable,TempTable)。问题是在这样做之后,如果TempTable中的任何值发生变化,它也将在MainTable中发生变化。
点赞
用户3197530
如 Piglet 所指出的那样,你可以像他的示例中那样使用临时表。函数内部对表的引用将在函数之后丢失,所以访问 newEntry 的唯一方法是通过主表。
但是,如果你真的需要复制(确实复制)表格,你需要使用一个函数来实现。但要记住,你经常不需要复制。
在这个答案中,展示了一个非常简短的 table 深拷贝方法。这可以用于使两个表格相互独立。这也处理了一些其他的东西,比如元表。此外,答案还提供了一些更深入的阅读链接。
我建议你使用 lua 的 penlight 库,这是一个非官方的 “标准” 库,非常有用。它有丰富的 文档,包括 指南 来展示你可以用 Penlight 做什么。在你的情况下,它提供了一个深度复制函数,所以一切都归结于这个:
local tablex = require "pl.tablex"
local tempTable = {}
-- 其他代码
local mainTable = {}
-- 其他代码
table.insert(mainTable, tablex.deepcopy(tempTable))
最后,一个关于 lua 语法的小建议:lua 的一个部分起源于数据描述语言,因此很容易和优美地编写这些内容:
TempTable = {
date = { day, month, year },
name = "Name Here",
address = "Address Here", -- 你可以在最后一个元素后放一个逗号
}
现在使用函数编写方式,你可以将所有内容很好地打包起来:
function create_entry(name, address, date)
local date = date or get_current_date() -- 如果缺少日期参数,则使用当前日期
return {
name = name,
address = address,
date = date
}
end
-- 可以这样使用:
table.insert(mainTable, create_entry("Foibudle", "12345 Dreamland", date("12-03-2015"))
-- 也可以不使用日期:
table.insert(mainTable, create_entry("Foibudle", "12345 Dreamland")
2016-06-01 15:52:38
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
使用
table.insert(MainTable, TempTable)可以将TempTable插入到MainTable中。请参考: http://www.lua.org/manual/5.3/manual.html#pdf-table.insert
当然,您也可以像这样将其分配给
MainTable的元素:或在循环中使用
MainTable[i] = TempTable...随你喜欢。
确保为
MainTable中的每个实例创建一个新表。表是通过引用传递的。如果您重用或更改TempTable,您也会更改MainTable的内容。只需在一个小函数中创建您的
TempTables(简化示例)function CreateNewEntry(name) local newEntry = {} newEntry.name = name or "no name" return newEntry end然后像这样使用它:
MainTable = {} table.insert(MainTable, CreateNewEntry("NuMs")) table.insert(MainTable, CreateNewEntry("Piglet"))