Der Ausgang ist 4, weil der letzte Schlüssel mit einem Wert 4 ist, aber das bedeutet nicht, dass 3 nicht auch definiert ist. In Lua würde 3 als Null definiert werden. Wenn Sie also den Operator verwenden, zählt er jeden Schlüssel in einer Sequenz mit einem Wert bis zum letzten Nicht-Null-Wert. Außer, (und ich könnte mich irren) ist der letzte Schlüssel in der Tabelle eine Potenz von 2, was zur Sprachoptimierung führt, sie zählt bis zu dem Wert, der eine Potenz von 2 ist. Im Allgemeinen sollten Sie sich von Tabellen fernhalten mit Null-Werten, da es einige andere seltsame Verhaltensweisen gibt, die deswegen auftreten.
Dieser Brocken mit tun, was Sie wollen, obwohl:
local T = {
[1] = 2,
[2] = 5,
[10] = 10
}
local lengthNum = 0
For k, v in pairs(T) do -- for every key in the table with a corresponding non-nil value
lengthNum = lengthNum + 1
end
print(lengthNum)
}
Was dies tut, ist es für Schlüssel (wie [1] oder [2]) und prüft die gesamte Tabelle überprüft, ob sie Wert. Jeder Schlüssel mit einem Nicht-Null-Wert führt die Schleife for
noch einmal durch. Es könnte einen kürzeren Weg dazu geben, aber so würde ich es machen.
Ja, Sie sind tödlich falsch. Sieh den Betrogenen. – Deduplicator
Ist es, wo ich gesagt habe, dass es bis zu dem Wert mit der Potenz von 2 zählt, weil es Schlüssel für Wert dort sagen sollte, oder bin ich sonst wo falsch? – Jacques
Es * kann * trotz früherer Löcher bis zu einer Potenz von 2 zählen, obwohl es nicht möglich ist. Keine Garantie, die Details sind in der Täuschung. – Deduplicator