如何检查Lua表中是否包含坐标?
2017-2-26 11:53:8
收藏:0
阅读:62
评论:1
我正在尝试实现一个简单的路径规划系统,它可以使用打开和关闭的列表。我在关闭列表中遇到了问题。如何检查关闭列表是否已经包含了这些坐标?
closed[current] = true
local neighbors = getNeighbors(current[1], current[2]) -- 获取当前节点的所有邻居节点
for k, v in ipairs(neighbors) do -- 遍历邻居节点
if not closed[v] then
table.insert(open, v)
end
end
getNeighbors会返回一个坐标(x,y)的所有邻居坐标。我该如何检查关闭表是否已经包含这些坐标?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

整个表的哈希
在 Lua 中,表的键(哈希)几乎可以是任何东西,甚至是具有两个值的表。
假设
current[1]和current[2]分别表示坐标x和y,你可以只是检查closed[current]。请参见下面的示例:local coordinates = { {1.3,5}, {2.2,3.4}, {3,6.8} } local closed = {} -- 空闭合列表 local current = coordinates[1] -- {1.3,5} print(closed[current]) -- 尚未访问 = nil closed[current] = true -- 标记已访问 print(closed[current]) -- 访问过 = true print(coordinates[2]) -- 尚未访问 = nil当你检查
if closed[current] then ...,不存在的条目相当于nil,那就相当于false。如果你明确想要false值而不是nil,可以像这样初始化闭合列表:closed = {} for i=1,#coordinates do closed[coordinates[i]] = false end哈希坐标值
唯一的问题可能发生在你的代码中复制坐标值而不是引用表
{x, y}的情况下。在这种情况下,你会有不同的表,因此即使两个表的值相等,哈希结果也会给你false。如果可能会发生这种情况,你需要使用 值 而不是表进行哈希。你可以像 Egor 建议的那样使用单个哈希,或者使用双重哈希,例如:
local function listAddPoint(list, point) -- 将点(一个 {x,y} 表)添加到列表中 if not list[point[1]] then list[point[1]] = {} end list[point[1]][point[2]] = true end local function listHasPoint(list, point) -- 检查点(一个 {x,y} 表)是否在列表中 if list[point[1]] and list[point[1]][point[2]] then return true end return false end local coordinates = { {1.3,5}, {2.2,3.4}, {3,6.8} } local closed = {} -- 空闭合列表 local current = coordinates[1] -- {1.3,5} print(listHasPoint(closed, current)) -- 尚未访问 = false listAddPoint(closed, current) -- 标记为已访问 print(listHasPoint(closed, current)) -- 访问过 = true print(listHasPoint(closed, coordinates[2])) -- 尚未访问 = false