ipairs iteriert über Indizes 1..n, wobei n + 1 der erste ganzzahlige Index mit einem Nullwert | ist
Paare iteriert über alle Schlüssel.
Wenn es mehr Schlüssel als sequenzielle Indizes gibt, kann es kein Array sein.
Sie müssen also nur sehen, ob die Anzahl der Elemente in pairs(table)
gleich der Anzahl der Elemente in ipairs(table)
ist
Der Code kann wie folgt geschrieben werden:
Ich bin ziemlich neu in Lua, also könnte es eine eingebaute Funktion geben, um die Berechnungen von numKeys und numIndices auf einfache Funktionsaufrufe zu reduzieren.
EDIT: Hier ist ein neuer Weg um Arrays zu testen, die ich erst kürzlich entdeckt habe. Für jedes von pairs
zurückgegebene Element wird einfach überprüft, ob das n-te Element nicht nil
ist. Soweit ich weiß, ist dies der schnellste und eleganteste Weg, um Array-ness zu testen.
Ich schrieb diesen Code für eine andere ähnliche Frage < Kürzlich:
%Vor%Hinweis: Wie @eric hervorhebt, sind Paare nicht so definiert, dass sie in einer bestimmten Reihenfolge durchlaufen werden. Daher ist dies keine gültige Antwort.
Folgendes sollte ausreichen; Es prüft, ob die Schlüssel von 1 bis zum Ende fortlaufend sind:
%Vor%Tags und Links arrays dictionary lua lua-table