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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:05:14