4

我不知道如何处理nils我的排序功能。

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

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

出现此错误:排序功能无效。但是根据文档,如果 a 在 b 之后,排序函数应该返回 false。否则为真。

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

4

2 回答 2

13

nil这与表中的值几乎没有关系。如果比较函数本身无效,则会生成错误消息。从文档中table.sort

如果comp给出,那么它必须是一个接收两个表格元素的函数,并在第一个小于第二个时返回 true(因此 not comp(a[i+1],a[i])在排序后为 true)。

换句话说,comp(a,b)必须暗示not comp(b,a)。如果此关系不成立,则可能会出现“排序功能无效”的错误。(请注意,它可能不会在所有情况下都被提出。)

为了更有帮助,我们确实需要查看传递给table.sort.

于 2010-01-21T23:48:48.227 回答
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
于 2010-01-20T16:38:02.097 回答