Lua - 变量与一个固定列表值相比较的最节约资源的方法
2017-7-8 23:19:28
收藏:0
阅读:67
评论:1
我有一个变量,叫做 'ID'。我需要相对于一定数量的值检查这个值。当然,ID 只能匹配其中一个值,所以不会有停在匹配值上的问题,因为其他值都不匹配。同时,变量也有可能不匹配任何给定的值。我的问题是,什么方法是最节约资源的?我想到了两种简单的方法来解决这个问题。因为我在编程时知道这些值,所以我可以使用 'or' 进行设置一个条件,只检查每个值,如下所示:
if (ID == "1" or ID == "16" or ID == "58") then
--do something--
end
这样做的问题在于,它相当冗长和繁琐。另一种选择涉及一个 foreach 循环,在此之前需要定义一个表格。
values = {"1", "16", "58"}
for _, value in ipairs(values) do
if(ID == value) then
return true
end
end
这样做的好处是可重用的,在我至少需要使用不同的值进行此检查 10 次时很有用,缺点是我怀疑它需要更多的资源。
任何帮助将不胜感激。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

表格可以用作集合:
interesting = { ["1"] = true,["16"] = true,["58"] = true } if interesting[ID] then -- ... end虽然占用更多的内存(每个空表格80字节加上每个条目32字节(在x86_64上IIRC),而将条目数量舍入到下一个二的幂次方),但比将比较链作为Lua指令序列比较要快(至少当事情变得更大时)。
对于少量的值,这并不重要。(如果您受限于CPU并且在您的情况下这非常重要,请在您的程序上下文中测量并查看哪个表现更好。不要在这方面给微基准测试过重的重量 - 缓存行为特别可能在这里产生有趣的影响。)
对于大量比较,这是正确的方法。它也比
if-then-else链更灵活。 (您可以在运行时更改事物而无需重新加载代码。)还要注意,您用于将元素固定在集合中的值并不重要,因此一个相对常见的习惯用法(特别是用于输入处理)是将操作作为函数放入表格中:
keybindings = { left = function() Player:move_left()end, right = function() Player:move_right()end, up = function() Player:jump()end, -- ... } function onKey(k) local action = keybindings [k] 如果有行动则这样做()结束 end虽然这肯定比直接比较和内联代码慢,但速度在这里基本上不重要(通常比每秒100x的频率要少得多),而灵活性则非常重要。