【问题标题】:Counting values based on another, iterating through a nested table - LUA基于另一个计数值,遍历嵌套表 - LUA
【发布时间】:2020-06-26 05:52:07
【问题描述】:

我还在学习 lua,pair 功能很棒,但我显然不知道如何正确使用它:

我正在尝试根据第一个值而不是键来计算嵌套表中某个值的总和。

我有一张桌子:

arr = {}
arr[100] = {1, "alpha", 4}
arr[10740] = {1, "bravo", 6}
arr[26104] = {2, "charlie", 7}
arr[150] = {3, "delta", 1}
arr[1006] = {2, "echo", 0}
arr[91002] = {1, "foxtrot", 2}
  • k 是一个随机属性 - 对一个键来说是奇数,但我必须这样
  • v[1] 是组 ID,
  • v[2] 是组名,
  • v[3] 是组中的数字

现在我可以使用 pair 函数来计算表中 v[3] 的总数:

count = 0
for k, v in pairs(arr) do
count = count + v[3]
end;
print count

我需要做的是计算按 v[1] 分组的 v[3] 的总数。 在他的表中,v[1] 是 1-16 的固定数字,但它们的数量可以不同。

但需要以下结果:

  • 第 1 组 = 12
  • 第 2 组 = 7
  • 第 3 组 = 1

我可以通过创建单独的表,取出第 1 组中的所有值,然后使用上述方法来实现它 - 但我觉得必须有更好的方法。

非常感谢。

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    你是在正确的方式,你需要额外的表来存储每个组的计数:

    local group_count = {}
    for k, v in pairs(arr) do
      group_count[v[1]] = (group_count[v[1]] or 0) + v[3]
    end
    
    -- not sorted output
    for k, v in pairs(group_count) do
      print('Group '..k..' = '..v)
    end
    

    【讨论】:

    • 谢谢,我不知道如果没有另一张桌子是否可行。 “或 0” 是为了避免您事先声明变量吗?如果是这样,那是一个不错的捷径。
    • Lua 空值评估为 false,因此这是检查未声明键的最简单方法。非常相似的快捷方式:if a then v = 1 else v = 2 endv = a and 1 or 2(与 C 中的 v = a ? 1 : 2 相同)
    猜你喜欢
    • 2018-11-21
    • 2019-06-11
    • 2021-10-30
    • 2016-06-03
    • 2014-06-03
    • 2019-08-22
    • 2016-02-24
    • 2021-11-27
    相关资源
    最近更新 更多