lua table.sort 行为不如预期
2017-5-2 9:49:38
收藏:0
阅读:83
评论:1
我有一个程序,评估图像集并为它们分配给定值,现在我想对此程序的输出进行排序,为此我有以下代码:
function SelectTop(params,images,count)
local values={}
for k,v in pairs(images) do
local noError,res=pcall(evaluate,params,v)
if noError then
values[v]=res
else
values[v] = 9999999999999999999999999999999999999999999999999999999999
end
end
function compare(a,b)
return a[2] < b[2]
end
table.sort(values,compare)
print(values)
end
我们可以合理地假设 evaluate 的输出类似于 math.random(7000)(实际代码要复杂得多,涉及神经网络)。 现在我希望输出结果已经排序,但实际上我得到的结果却是这样的:
{
table: 0x40299d30 : 4512.3590053809
table: 0x40299580 : 4029.3450116073
table: 0x40298dd0 : 6003.9508240314
table: 0x40297de0 : 6959.9145312802
table: 0x40297630 : 4265.2784117677
table: 0x40296e40 : 3850.0829011681
table: 0x40296690 : 4007.2308907069
table: 0x40296ec0 : 3840.5216952082
table: 0x4029a770 : 5059.1475464564
table: 0x40299fc0 : 6058.9603651599
table: 0x40299810 : 1e+58
table: 0x40299060 : 1e+58
table: 0x402988b0 : 5887.729117754
table: 0x402978c0 : 3675.7295252455
table: 0x40296920 : 1e+58
table: 0x4029aa00 : 5624.6042279879
table: 0x40295bf8 : 1391.8185365923
table: 0x40296458 : 4276.09869066
table: 0x40299aa0 : 1e+58
table: 0x402992f0 : 6334.3641972965
table: 0x40298300 : 2660.5004512843
table: 0x40298b40 : 6200.373787482
table: 0x40296148 : 6178.926312832
table: 0x40298380 : 1559.5307868896
table: 0x40295968 : 1e+58
table: 0x40296bb0 : 6708.7545218628
table: 0x4029b550 : 1484.2931717456
table: 0x40298400 : 1638.1286256175
table: 0x40298070 : 3762.7368939272
table: 0x402963d8 : 1500.002116023
table: 0x4029ac90 : 2486.2695974502
table: 0x40295e88 : 1e+58
table: 0x40297b50 : 4806.6468870717
table: 0x4029a4e0 : 4328.0636461426
table: 0x402973a0 : 4757.4343171052
table: 0x4029a250 : 3998.8649821268
}
那么 table.sort 为什么不起作用?我认为在这里应该会进行某种排序?
有人知道我哪里出错了吗?
所以,如果我们想要一个完整的示例,我们可以像这样做:
function evaluate (a,b)
return math.random(7000)
end
SelectTop(nil,{ {a, b, c}, {d, e, f}, {g, e, f}, {f, e, f} },0)
输出:
{ table: 0x41c2af18 : 5560
table: 0x41c2afa8 : 4131
table: 0x41c2af60 : 4892
table: 0x41c2aff0 : 5273
}
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

table.sort只能用于数组,不能用于字典。您需要用类似
values[#values+1]= {v, res}的方式替换values[v]=res,并相应地调整compare函数。目前
table.sort算法看到的是空数组,因为您正在使用图像本身作为索引,没有 1/2/3/... 等项目的索引。