Bagaimana untuk iterate melalui tabel di Lua?

Jadi, saya memiliki sebuah meja sesuatu di sepanjang garis-garis ini:

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

Itu doesn't tampak seperti itu's mungkin untuk mengaksesnya berdasarkan indeks mereka, dan nilai-nilai sendiri tabel, jadi aku hanya membuat nilai pertama dari tabel bersarang indeks itu, sehingga sekarang terlihat seperti ini:

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

Jadi, sekarang setiap kali saya menggunakan salah satu dari tabel ini, aku tahu apa yang indeks ini, tapi masih bisa't sampai ke meja dengan menggunakan indeks, jadi saya mulai untuk menulis fungsi yang loop melalui mereka semua, dan memeriksa indeks sampai menemukan orang yang tepat. Kemudian saya menyadari... bagaimana bisa aku loop melalui mereka jika aku bisa't sudah merujuk kepada mereka oleh indeks mereka? Jadi, sekarang saya'm terjebak. Aku benar-benar ingin bisa untuk jenis arr.apel vs arr[1] sebagian besar waktu, tapi tentu saja itu's yang diperlukan untuk melakukan investasi di kali.

Mengomentari pertanyaan (2)
Larutan

Untuk iterate melalui semua pasangan kunci-nilai dalam tabel, anda dapat menggunakan pasangan:

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

output:

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

Edit: Perhatikan bahwa Lua doesn't menjamin setiap iterasi agar asosiatif bagian dari meja. Jika anda ingin mengakses item dalam urutan tertentu, mengambil kunci dari arr dan semacam itu. Kemudian akses arr melalui diurutkan kunci:

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

output:

  apples  a   red     5
  oranges o   orange  12
  pears   p   green   7
Komentar (9)

Jika anda ingin merujuk ke tabel bersarang dengan beberapa tombol anda dapat menetapkan mereka untuk memisahkan tombol. Tabel tidak diduplikasi, dan masih referensi nilai yang sama.

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

Blok kode ini memungkinkan anda untuk iterate melalui semua pasangan kunci-nilai dalam sebuah tabel (http://lua-users.org/wiki/TablesTutorial):

for k,v in pairs(t) do
 print(k,v)
end
Komentar (0)