Lua Sort 自定义排序的注意事项(转)

原帖地址: https://blog.csdn.net/noetic_wxb/article/details/80748113

要求传入两个相同的数时要返回false, 换句话说,下面的函数用<=做比较,是错误的。

local compare_func = function(v1, v2)  

    return v1 <= v2   -- error 

end 

测试

local t = {4,3,2,1}
table.sort(t,compare_func)
for k, v in ipairs(t) do
  print(v)

end 

输出:1,2,4,3

为什么了?

因为内部使用sheel sort算法,具体细节不表。 在上面的例子中,算法运行中会调用compare_func (3,3),返回true,不满足相同元素返回false的要求。算法执行错误。

比较函数写<,不要写<=

local compare_func = function(v1, v2)
if v1[1] == v2[1] then
return v1[2] >= v2[2]
else
return v1[1] > v2[1]
end
end

local t = {{1,1},{1,1},{2,2},{3,3}}
table.sort(t,compare_func)

for k, v in ipairs(t) do
print(v[1], v[2])
end