Die Behandlung von nils in Sortierfunktion
Frage
Ich weiß nicht, wie meine nils
Sortierfunktion wird zu behandeln.
Wenn ich diese Überprüfung in sie haben, table.sort
stürzt nach einigen Anrufen.
if a == nil then
return false
elseif b == nil then
return true
end
Mit diesem Fehler: ungültige Bestellfunktion für die Sortierung . Aber nach der Dokumentation sollte Sortierfunktion false zurück, wenn ein nach b geht. Andernfalls True.
Wenn ich das Code entfernen entfernen, ist es natürlich stürzt die Indizierung nils.
Lösung
Das hat wenig oder gar nichts mit nil
Werten in der Tabelle zu tun. Die Fehlermeldung wird generiert, wenn die Vergleichsfunktion selbst ungültig ist. Aus der Dokumentation für table.sort
:
Wenn
comp
gegeben ist, dann muss es sein, ein Funktion, die zwei Tisch erhält Elemente, und gibt true zurück, wenn die erstes ist kleiner als die zweite (so dassnot comp(a[i+1],a[i])
wird wahr nach der Art).
Mit anderen Worten muss comp(a,b)
not comp(b,a)
bedeuten. Wenn diese Beziehung nicht gilt, dann wird der Fehler „ungültige Bestellfunktion für die Sortierung“ wird wahrscheinlich erhöht. (Beachten Sie, dass es möglicherweise nicht in allen Fällen erhöht werden.)
Um mehr hilfreich zu sein, was wir wirklich brauchen die ganze Funktion table.sort
übergeben, um zu sehen.
Andere Tipps
Um alle Null-Werte am Anfang des Feldes setzen:
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
Um alle Null-Werte am Ende des Feldes setzen:
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