Lua - Table.hasValue 返回 nil
2014-7-20 17:42:50
收藏:0
阅读:88
评论:4
我有一个表格,内容如下:
table = {milk, butter, cheese} -- 没有引号
我正在寻找一种方法来检查一个给定的值是否在表格中,我找到了这个:
if table.hasValue(table, milk) == true then ...
但它返回 nil,有什么原因吗?(它说 .hasValue 无效)还是我可以找到替代方案来检查值是否存在该表格中?我尝试了几种方法,例如:
if table.milk == true then ...
if table[milk] == true then ...
所有这些都返回 nil 或 false。
点赞
用户1827883
你可以尝试这样做:
items = {milk=true, butter=true, cheese=true}
if items.milk then
...
end
或者
if items.butter == true then
...
end

2014-07-20 16:45:55
用户18403
Lua 的表可以作为数组或者关联数组(映射)使用。
虽然没有 hasValue 函数,但是可以通过将表用作关联数组,轻松高效地实现它:
local table = {
milk = true,
butter = true,
cheese = true,
}
-- has milk?
if table.milk then
print("Has milk!")
end
if table.rocks then
print("Has rocks!")
end
2014-07-20 17:21:25
用户2698261
你有几个选项。
第一种是创建一个 set:
local set = {
foo = true,
bar = true,
baz = true
}
然后检查其中的任何一个是否在表中:
if set.bar then
这种方法的缺点是它不会以任何特定顺序迭代它( pairs 以任意顺序返回项目)。
另一个选项是使用一个函数来检查表中的每个值。在大型表中,这将非常缓慢,这使我们回到第一个选项的修改:反向查找生成器:(这是我建议做的方法——除非你的集合是静态的)
local data = {"milk", "butter", "cheese"}
local function reverse(tbl, target)
local target = target or {}
for k, v in pairs(tbl) do
target[v] = k
end
return target
end
local revdata = reverse(data)
print(revdata.cheese, revdata.butter, revdata.milk)
-- Output: 3 2 1
这将生成一个 set (还附带了一个奖励就是给你原始表中的值的索引)。你也可以将反向查找放入与数据相同的表中,但这对于数字不会很好(如果需要再次生成反向查找,它会很混乱)。
2014-07-20 20:33:59
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 = {milk=true, butter=true, cheese=true},那么你可以使用if table.milk == true then ...。