基于另一个计数值,遍历嵌套表 - LUA

Posted

技术标签:

【中文标题】基于另一个计数值,遍历嵌套表 - LUA【英文标题】:Counting values based on another, iterating through a nested table - 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 组中的所有值,然后使用上述方法来实现它 - 但我觉得必须有更好的方法。

非常感谢。

【问题讨论】:

【参考方案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 相同)

以上是关于基于另一个计数值,遍历嵌套表 - LUA的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历Lua中的表?

Lua C API 嵌套表段。过错

如何从 C++ 读取和写入嵌套的 lua 表?

如何使用 C API 创建嵌套 Lua 表

为 Lua 包装 C 库:如何创建嵌套的函数表?

从嵌套的dict中选择一个随机值,并在另一个嵌套的dict中更新它