質問
私はソート機能が取得する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
所属していません StackOverflow