Lua中计算指定键对应值总和的代码问题排查与修正
问题分析与修复
你的代码存在两个核心问题,导致结果不符合预期:
1. 累加变量未重置
你在函数外部定义了local s = 0,这个变量会在多次调用sum函数时持续累加,没有每次求和前重置为0。比如第一次调用sum('apple', ...)后s变成2,第二次调用sum('mango', ...)时会在2的基础上加7,得到9,而不是正确的3+7=10。
2. 遍历逻辑错误
你通过currentTable的索引k去匹配strings的元素,这意味着:
- 仅处理了
currentTable的第1个元素(对应apple)和第2个元素(对应mango) - 完全忽略了
currentTable中其他元素的对应值(比如第2个元素的apple=3、第3个元素的apple=1、第1个元素的mango=3)
修复后的代码
local currentTable = { {apple = 2, mango = 3}, {apple = 3, mango = 7}, {apple = 1} } local strings = {'apple', 'mango'} local newTable = {} -- 重写sum函数,每次调用时初始化累加变量 function sum(str, dataList) local s = 0 -- 每次求和都重置为0 for _, item in pairs(dataList) do -- 检查当前item是否包含目标键,有则累加 if item[str] then s = s + item[str] end end return s end -- 遍历要统计的键,对每个键计算所有元素的总和 for _, key in pairs(strings) do newTable[key] = sum(key, currentTable) end -- 输出结果 for k, v in pairs(newTable) do print(k, v) end
代码解释
- 将
sum函数改为接收目标键和整个currentTable,遍历所有元素累加对应键的值 - 把累加变量
s移到函数内部,每次调用都会重新初始化,避免跨调用的累计错误 - 遍历
strings中的每个键,单独计算该键在所有元素中的总和,确保所有数据都被统计到
运行后会得到预期结果:
apple 6 mango 10
内容的提问来源于stack exchange,提问作者88willr
相关产品推荐
相关产品推荐

