質問

私はソート機能が取得するnilsを処理する方法がわからない。

私はそれでこのチェックを持っている場合は、table.sortは、いくつかのコールの後にクラッシュします。

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

このエラーの場合:をソートするための無効な注文機能。 bの後になった場合でも、ドキュメントによると、ソート機能は、falseを返す必要があります。そうでない場合はTrueます。

私はそのコードを削除を削除する場合は

は、もちろん、それはインデックスNILSのクラッシュします。

役に立ちましたか?

解決

これは、テーブルにnil値で行うにはほとんど、あるいは何もしています。比較関数自体が無効である場合、エラーメッセージが生成されます。

table.sort のドキュメントから
  compが与えられた場合は、

は、それがなければなりません   2つのテーブルを受け取る機能   要素、およびtrueを返したときに   最初のように(以下秒未満であります   not comp(a[i+1],a[i])はtrueになります   )ソート後ます。

言い換えれば、comp(a,b)not comp(b,a)を意味する必要があります。この関係が成立しない場合、エラー「ソートするための無効な注文機能は、」可能性が提起されます。 (それはすべてのケースで提起されない可能性があることに注意してください。)

より有用であるために、私たちは本当にtable.sortに渡された関数全体を参照する必要があります。

他のヒント

配列の先頭にすべてゼロの値を入れてます:

  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

配列の最後にすべてゼロの値を入れてます:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top