如何在Lua中汇总一个数字表?

voi*_*hos 6 lua sum built-in

Lua有内置sum()功能吗?我似乎无法找到一个,我几乎无处不在文档中.或许table.sum(),或类似的东西,遵循当前的约定.但由于我找不到它,我必须实现它:

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

    return sum
end
Run Code Online (Sandbox Code Playgroud)

但是,实现这么简单的事情似乎很有趣.是否存在内置函数?

kat*_*ugh 14

我不同意,如table.sum标准库中那样具有原始和特定的东西是多余的.

按照以下方式实施更有用table.reduce:

table.reduce = function (list, fn) 
    local acc
    for k, v in ipairs(list) do
        if 1 == k then
            acc = v
        else
            acc = fn(acc, v)
        end 
    end 
    return acc 
end
Run Code Online (Sandbox Code Playgroud)

并使用简单的lambda:

table.reduce(
    {1, 2, 3},
    function (a, b)
        return a + b
    end
)
Run Code Online (Sandbox Code Playgroud)

示例实现reduce缺乏类型检查,但你应该明白.

  • 我不同意,像 `sum` 这样常用的东西应该在 std-lib 中。编写 lambda 很快就会变老——这不是关于组合的困难,而是代码的可读性。在阅读成百上千行代码时,我更愿意阅读“my_table.sum”而不是你那臃肿的blob。 (5认同)
  • 我只是觉得有必要指出“reduce”也不在标准库中...... (3认同)
  • 关键是,`reduce` 是通用的,对许多应用程序都很有用。如果您希望标准库像在 Lua 中一样最小化,则在特定情况下稍微冗长是可以的。 (2认同)