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.

War es hilfreich?

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 dass   not 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top