如何在Lua中对数字表求和?

问题描述 投票:0回答:1

Lua有内置的

sum()
函数吗?我似乎找不到一个,我几乎翻遍了文档中的所有地方。也许
table.sum()
,或者类似的东西,遵循当前的惯例。但由于我找不到它,我不得不实现它:

function sum(t)
    local sum = 0
    for k,v in pairs(t) do
        sum = sum + v
    end

    return sum
end

不过,必须实现这么简单的东西似乎有点有趣。是否存在内置函数?

lua sum built-in
1个回答
21
投票

我不同意,在标准库中拥有像

table.sum
这样原始和具体的东西是多余的。

按照以下方式实施

table.reduce
会更有用:

---Reduces an array
---@param list any[] An array
---@param fn function The reduction predicate
---@param init any The initial accumulator value
---@return any The final value of the accumulator
table.reduce = function (list, fn, init)
    local acc = init
    for k, v in ipairs(list) do
        if 1 == k and not init then
            acc = v
        else
            acc = fn(acc, v)
        end
    end
    return acc
end

并将其与简单的 lambda 一起使用:

table.reduce(
    {1, 2, 3},
    function (a, b)
        return a + b
    end,
    0
)

reduce
的示例实现缺乏类型检查,但您应该明白了。

© www.soinside.com 2019 - 2024. All rights reserved.