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

如何将字符串键值对存入Lua table并解决表长度为0的问题

问题原因

你的代码已经成功把键值对存入table了,打印#a得到0是两个核心原因:

  • string.gmatch捕获到的数字是字符串类型,你实际存入的是a["3"] = "Hello"、a["67"] = "Hi"这类字符串键的键值对,不属于Lua table的数组部分
  • Lua的#操作符仅统计从下标1开始、连续无中断的整数键构成的数组部分长度,如果键是字符串、或者整数键不满足从1开始连续的要求,#的返回结果不会统计哈希部分的内容,也不符合你的预期

你可以直接遍历table验证数据已经正常存储:

for k, v in pairs(a) do
    print(k, v)
end
可用解决方案

方案1:统计非数组结构table的总键值对数量

不要用#,改用pairs遍历计数即可:

local newstr = "3 = Hello, 67 = Hi, 2 = Bye"
local a = {}
for k,v in newstr:gmatch "(%d+)%s*=%s*(%a+)" do 
    a[k] = v
end

local count = 0
for _ in pairs(a) do
    count = count + 1
end
print(count) -- 输出预期值3

方案2:按提取顺序存入数组结构

如果需要用#获取长度,你可以把提取到的原键值作为元素属性,从1开始按顺序插入数组:

local newstr = "3 = Hello, 67 = Hi, 2 = Bye"
local a = {}
for k,v in newstr:gmatch "(%d+)%s*=%s*(%a+)" do 
    table.insert(a, {
        origin_key = tonumber(k),
        value = v
    })
end

print(#a) -- 输出预期值3
-- 遍历访问
for idx, item in ipairs(a) do
    print(idx, item.origin_key, item.value)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:54:03