Lua表格中的比较表格
2013-9-29 23:49:9
收藏:0
阅读:110
评论:3
我有一张表,保存了对其他表的引用,如下所示:
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a[#a + 1] = b
end
现在,如果我想查看特定对象是否在“a”中,我必须使用 pairs,就像这样:
local z = a.collection[ 99 ]
for i,j in pairs( a.collection ) do
if j == z then
return true
end
end
z对象在第99个位置,我必须等待pairs迭代其他98个对象。这种设置使我的程序变得缓慢。有没有办法制作一些不是字符串或表格比较的键,以便一行代码就能完成任务?像:
if a.collection[{z}] then return true end
提前致谢!
原文链接 https://stackoverflow.com/questions/9371557
点赞
stackoverflow用户1208078
你可能想要考虑从使用pairs()切换到使用普通的for循环并索引表格,pairs()在更大的表格集合上似乎速度较慢。
for i=1, #a.collection do
if a.collection[i] == z then
return true
end
end
我比较了使用pairs()和表格索引迭代100万个表格集合的速度,每次索引都快了一点。使用os.clock()自行分析您的代码。
我无法想出比使用某种哈希函数将唯一索引设置为a.collection表格更快的解决方案。但是,这样做会使得从a.collection中获取特定表变成一项非常棘手的任务(您不能只是用a.collection \ [99],您必须迭代直到找到想要的表格)。但是,您可以通过类似a.collection \ [hashFunc(z)]~=nil...的方式轻松测试a.collection中是否存在该表格。
2012-02-21 04:14:15
stackoverflow用户33252
为什么将对象存储在表的值槽中而不是键槽中?
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a.collection[b] = i
end
查看特定对象是否在 "a" 中:
return a.collection[b]
如果需要按整数索引访问集合,请同时存储它们:
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a.collection[i] = b
a.collection[b] = i
end
查找:
local z = a.collection[99]
if a.collection[z] then return true end
2012-02-21 16:37:01
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
不知道是否更快,但也许这会有所帮助:
填充:
local a = {} a.collection = {} for i = 1, 100 do local b = {} a.collection[b] = true -- 用表/对象作为索引 end
查找:
local z = a.collection[99] if a.collection[z] then return true end
如果这不是你想做的,你可以将整个数组分成较小的桶,并使用哈希表来跟踪哪个对象属于哪个桶。