it-swarm.com.de

Wie durchläuft man eine Tabelle in Lua?

Also habe ich eine Tabelle in dieser Richtung:

arr =
{
  apples = { 'a', "red", 5 },
  oranges = { 'o', "orange", 12 },
  pears = { 'p', "green", 7 }
}

Es scheint nicht möglich zu sein, auf sie basierend auf ihrem Index zuzugreifen, und die Werte selbst sind Tabellen. Deshalb habe ich den ersten Wert der verschachtelten Tabelle zum Index daraus gemacht. Daher sieht es jetzt so aus:

arr =
{
  apples = { 0, 'a', "red", 5 },
  oranges = { 1, 'o', "orange", 12 },
  pears = { 2, 'p', "green", 7 }
}

Jedes Mal, wenn ich eine dieser Tabellen verwende, weiß ich, was der Index ist, kann aber mit dem Index immer noch nicht zur Tabelle gelangen. Deshalb habe ich begonnen, eine Funktion zu schreiben, die sie alle durchläuft und die Indizes bis überprüft es findet den richtigen. Dann wurde mir klar ... wie kann ich sie durchlaufen, wenn ich nicht bereits anhand ihres Index auf sie verweisen kann? Also, jetzt stecke ich fest. Ich möchte eigentlich die meiste Zeit in der Lage sein, arr.apples vs arr [1] zu tippen, aber es ist natürlich notwendig, beides zu tun.

46
Lemony Lime

Um alle Schlüssel-Wert-Paare in einer Tabelle zu durchlaufen, können Sie pairs verwenden:

for k, v in pairs(arr) do
  print(k, v[1], v[2], v[3])
end

ausgänge:

pears   2   p   green
apples  0   a   red
oranges 1   o   orange

Edit: Beachten Sie, dass Lua keine Iterationsreihenfolge für den assoziativen Teil der Tabelle garantiert. Wenn Sie in einer bestimmten Reihenfolge auf die Artikel zugreifen möchten, rufen Sie die Schlüssel von arr ab und sortieren Sie sie. Greifen Sie dann über die sortierten Schlüssel auf arr zu:

local ordered_keys = {}

for k in pairs(arr) do
    table.insert(ordered_keys, k)
end

table.sort(ordered_keys)
for i = 1, #ordered_keys do
    local k, v = ordered_keys[i], arr[ ordered_keys[i] ]
    print(k, v[1], v[2], v[3])
end

ausgänge:

  apples  a   red     5
  oranges o   orange  12
  pears   p   green   7
79
greatwolf

Wenn Sie mit mehreren Schlüsseln auf eine verschachtelte Tabelle verweisen möchten, können Sie sie einfach separaten Schlüsseln zuweisen. Die Tabellen werden nicht dupliziert und verweisen weiterhin auf dieselben Werte.

arr = {}
apples = {'a', "red", 5 }
arr.apples = apples
arr[1] = apples

Mit diesem Codeblock können Sie alle Schlüssel-Wert-Paare in einer Tabelle durchlaufen ( http://lua-users.org/wiki/TablesTutorial ):

for k,v in pairs(t) do
 print(k,v)
end
9
frr171