如何删除 Lua 表中的所有元素?
2014-12-4 6:47:59
收藏:0
阅读:148
评论:6
如何删除 Lua 表中的所有元素?我不想这样做:
t = {}
table.insert(t, 1)
t = {} -- 这会把一个新的指针分配给 t
我想保留相同的指针 t
,但删除 t
中的所有元素。
我尝试过:
t = {}
table.insert(t, 1)
for i,v in ipairs(t) do table.remove(t, i) end
上面的方法是否有效?还需要其他操作吗?
原文链接 https://stackoverflow.com/questions/4880368
点赞
stackoverflow用户598655
对于表 t 中的每个键值对,
执行以下操作:
将键对应的值设为 nil。
如果表不完全作为数组使用,则使用 ipairs 可能会有困难。
2011-02-02 22:31:37
stackoverflow用户1183387
为了使用忽略元方法 __pairs
的更快版本:
local next = next
local k = next(tab)
while k ~= nil do
tab[k] = nil
k = next(tab, k)
end
编辑:正如评论中 @siffiejoe 提到的,这可以通过将 pairs
调用替换为其默认返回值完成简化: 使用 next
方法和表本身。另外,为了避免所有元方法,可以使用 rawset
方法进行表索引赋值:
for k in next, tab do rawset(tab, k, nil) end
2014-12-04 06:34:26
stackoverflow用户4988149
#table
表示表的大小,因此如果 t = {1,2,3}
,则 #t = 3
。
你可以使用以下代码删除元素:
while #t ~= 0 do rawset(t, #t, nil) end
这将遍历表并删除每个元素,最终得到一个空表。
2015-06-10 02:34:52
stackoverflow用户4988149
表元素的插入和删除比较
表大小为10000000
[1] while和rawset
while #t ~= 0 do rawset(t, #t, nil) end
花费时间= 0.677220
[2] next和rawset
for k in next, t do rawset(t, k, nil) end
花费时间= 0.344533
[3] ipairs和rawset
for i, v in ipairs(t) do t[i] = nil end
花费时间= 0.012450
[4] for、rawset
count = #t
for i=0, count do t[i]=nil end
花费时间= 0.009308
表元素的插入
[1] table.insert函数
for i=0, 10000000 do table.insert(t, i, i) end
花费时间= 1.0590489
[2] 使用#t
for i=0, 10000000 do t[#t+1] = i end
花费时间= 0.703731
[3] for、rawset
for i=0, 10000000 do rawset(t, i, i) end
花费时间= 0.100010
结果。
最快的删除方法:4
最快的插入方法:3
2015-06-13 06:12:58
stackoverflow用户7224093
将变量改为其他任何值然后再改回表格,这样它就为空。
t = {1,2,3}
print(t[1]) -- 1
t = "Hello World"
print(t) -- Hello World
t = {}
print(t[1]) -- nil
2022-05-12 07:38:38
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
最简单和表现最好的方法如下:
for k,v in pairs(tab) do tab[k]=nil end
你提供的方法是不可用的:
table.remove
会将剩余的元素移动以填补空洞,进而打乱了表的遍历。详情请参阅 next 函数的说明。