You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用pairs/next函数的情况下遍历Lua表的非数字索引?

解决方法

你的原循环跑不起来,是因为#table_arr只能获取表中**连续整数索引(从1开始)**的长度,而你的table_arr只有字符串键,所以#table_arr结果是0,循环直接跳过了。

因为不能用ipairs、pairs、next,那只能通过预先维护键数组的方式来遍历,具体实现如下:

方式1:普通for循环遍历键数组

先把所有字符串键存到一个数组里,再通过这个数组遍历原表:

local table_arr = {
    a = 3,
    b = 42,
    c = 10
}

-- 预先定义所有键的数组
local keys = {"a", "b", "c"}

-- 遍历键数组获取对应键值
for x = 1, #keys do
    local key = keys[x]
    local value = table_arr[key]
    print(key)   -- 依次输出a、b、c
    print(value) -- 依次输出3、42、10
end

方式2:自定义迭代器函数

如果想用类似pairs的迭代器风格,可以写一个本地迭代器函数:

local table_arr = {
    a = 3,
    b = 42,
    c = 10
}

local keys = {"a", "b", "c"}

-- 自定义迭代器函数
local function iterate_table(t, key_list)
    local idx = 0
    return function()
        idx = idx + 1
        local key = key_list[idx]
        if key then
            return key, t[key]
        end
    end
end

-- 使用迭代器遍历
for key, value in iterate_table(table_arr, keys) do
    print(key)
    print(value)
end

需要注意:如果后续table_arr的键有新增或删除,要同步更新keys数组,否则会漏遍历或出现nil值。

内容的提问来源于stack exchange,提问作者C0nw0nk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:05:01