我不知道如何处理我的排序函数nils
。
当我检查它时,table.sort
在一些电话后崩溃。
if a == nil then
return false
elseif b == nil then
return true
end
出现此错误:排序无效的订单功能。但根据文档,sort函数应该返回false,如果a在b之后。如果不是这样。
如果我删除删除该代码,它当然会崩溃索引nils。
答案 0 :(得分:12)
这与表中的nil
值很少或没有关系。如果比较函数本身无效,则会生成错误消息。来自table.sort
的文档:
如果给出
comp
,那么它必须是a 接收两个表的函数 元素,并在返回时返回true 首先是小于第二个(所以not comp(a[i+1],a[i])
将是真的 排序之后)。
换句话说,comp(a,b)
必须暗示not comp(b,a)
。如果此关系不成立,则可能会出现错误“排序的无效顺序函数”。 (请注意,在所有情况下都可能不会引发它。)
为了更有帮助,我们确实需要将整个函数传递给table.sort
。
答案 1 :(得分:2)
将所有nil值放在数组的开头:
function mycomp(a,b)
if a == nil and b == nil then
return false
end
if a == nil then
return true
end
if b == nil then
return false
end
return a < b
end
将所有nil值放在数组的末尾:
function mycomp(a,b)
if a == nil and b == nil then
return false
end
if a == nil then
return false
end
if b == nil then
return true
end
return a < b
end