在sort函数中处理nils

时间:2010-01-20 15:54:56

标签: sorting lua null lua-table

我不知道如何处理我的排序函数nils

当我检查它时,table.sort在一些电话后崩溃。

if a == nil then
    return false
elseif b == nil then
    return true
end

出现此错误:排序无效的订单功能。但根据文档,sort函数应该返回false,如果a在b之后。如果不是这样。

如果我删除删除该代码,它当然会崩溃索引nils。

2 个答案:

答案 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