Wie kann ich überprüfen, ob eine Lua-Tabelle nur sequentielle numerische Indizes enthält?

7

Wie kann ich eine Funktion schreiben, die bestimmt, ob das Tabellenargument ein echtes Array ist?

%Vor%

Ich sehe keine Möglichkeit herauszufinden, ob die Zifferntasten die einzigen Schlüssel sind.

    
Eric 20.05.2011, 19:58
quelle

7 Antworten

3

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:

%Vor%

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.

    
Ponkadoodle 22.05.2011, 18:25
quelle
15

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.

%Vor%     
kikito 21.05.2011 07:22
quelle
2

Mit "true array" meinen Sie eine Tabelle, deren Schlüssel nur Zahlen sind. Überprüfen Sie dazu den Typ jedes Schlüssels Ihrer Tabelle. Versuchen Sie Folgendes:

%Vor%     
SolarBear 20.05.2011 20:09
quelle
0

Ich schrieb diesen Code für eine andere ähnliche Frage < Kürzlich:

%Vor%     
AlexStack 23.09.2011 15:05
quelle
0

Hier ist meine Annahme, mit #array eine Lücke zu entdecken oder zu stoppen, wenn zu viele Schlüssel gelesen wurden:

%Vor%     
BMitch 04.07.2011 14:20
quelle
0

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%     
radiospiel 26.10.2012 23:32
quelle
-1

Iterate von 0 bis zur Anzahl der Elemente und überprüfe, ob alle Elemente mit dem Index des Zählers existieren. Wenn es kein Array ist, werden einige Indizes in der Sequenz fehlen.

    
Gabriel 20.05.2011 20:05
quelle

Tags und Links