首页 > 解决方案 > 如何使用键、值和索引遍历 Lua 表

问题描述

我想遍历一个看起来像这样的表

function add(t, k, v, ...)
    if k ~= nil then
        t[k] = v
        t[#t+1] = k
        return add(t, ...)
    end
    return t
end

my_table = add({ }, "a", 5, "b", 4, "c", 3)

for i,k in ipairs(my_table) do
    local v = my_table[k]
    print(k, v)
end

结果:

一 - 5

b - 4

c - 3

但我希望能够使用索引、键和值循环遍历表,所以它看起来像这样:

1 - 一个 - 5

2 - b - 4

3 - c - 3

这在Lua中可能吗?

标签: arraysloopsluaiteratoriteration

解决方案


迭代器:

function triples(t)   
  local function next_triple(tbl, idx)
    idx = idx + 1
    local k = tbl[idx]
    if k ~= nil then 
      return idx, k, tbl[k]
    end
  end
  return next_triple, t, 0
end

用法:

local a = {"q", "w", "e", q = 11, w = 22, e = 33}
for i, k, v in triples(a) do
  print(i, k, v)
end

输出:

1   q   11
2   w   22
3   e   33

推荐阅读