使用 Lua 表解决 Python 代码片段的最佳方案
2018-5-14 19:2:2
收藏:0
阅读:81
评论:1
我正在学习 Lua,从 Python 转过来,Lua 表似乎有些复杂,下面这个简单的例子非常优雅,但将其翻译为 Lua 却对我来说很困难,因为 Lua 没有元组的概念。
所以我正在寻找最佳的 Lua 解决方案
a = [(1, 1), (2, 2), (3, 3), (4, 4)]
if (3, 3) in a:
print("Yay!")
else:
print("Nay!")
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

一对就像长度为2的列表,因此您可以简单地表示
a如下所示:这里的棘手部分是Python的
in通过它们的_值_而不是_标识_来比较对象。也就是说,在Python中,(1, 2) in [(1, 2)]但(1, 2)不是(1, 2)。Lua没有“值”相等的概念(除了字符串和数字,它们没有标识)。
您可以通过设置
__eq元方法来覆盖==的行为。不幸的是,Lua没有搜索表以查找与某个查询相等的值的函数,因此可能过度。直接地,您可以编写一个“包含对”函数,该函数可以像下面定义的
a一样工作:function containsPair(list, pair) -- 找到带有与`pair`(作为对)相等的值的list的键 for k, v in ipairs(list) do if v [1] == pair [1] and v [2] == pair [2] then return k end end end if containsPair(a, {3, 3} ) then ...... end通过传递一个函数来比较,您可以使其更加通用(或者等效地使用
==,但实现__eq元方法):function containsLike(list, lhs, eq) -- 找到带有与lhs相等的值的列表的键 for k, lhs in ipairs(list) do if eq(lhs, rhs) then return k end end end function pairEq(a, b) return a [1] == b [1] and a[2] == b[2] end if containsLike(list, {3, 3}, pairEq) then ...... end如果您真正想要的是一组对,您可以使用“二维映射”(映射到映射):
a = {} a [1] = {} a [1] [1] = true a [2] = {} a [2] [2] = true a [3] = {} a [3] [3] = true if a [3] and a [3] [3] then ...... end检查行是否已被创建可能很麻烦。您可以使用元表来模仿Python的
defaultdict并清理它:function default(f) return setmetatable({}, { __index = function(self, k) -- self [k]为nil,但被要求。 --让我们将其分配给默认值: self [k] = f() --并返回新的分配: return self[k] end, }) end local a = default(function() return {} end) a [1] [1] = true a [2] [2] = true a [3] [3] = true if a[3][3] then ...... end