【发布时间】:2021-07-01 09:43:02
【问题描述】:
如何使用 LUA 添加嵌套表中的某些值。
假设对于列表中未确定数量的项目,我希望将所有“计数”值添加到一个变量中。
在以下只有 2 个项目的示例中,期望的结果是有一个值为“5”的变量,因为它将来自“master”和“data”的“count:3”和“count:2”值相加" 项目。
spec:
nodeSets:
- config:
node.store.allow_mmap: true
count: 3
name: master
podTemplate:
metadata:
annotations:
sidecar.istio.io/inject: "false"
- config:
node.store.allow_mmap: true
count: 2
name: data
podTemplate:
metadata:
annotations:
sidecar.istio.io/inject: "false"
【问题讨论】:
-
我觉得你一定错过了一些东西,但这是否符合你的要求?
local sum = 0; for _,node in pairs(nodeSets) do sum = sum + node.count end。您似乎没有遍历嵌套表,而只需要索引在nodeSets中排序的表即可获得计数。 -
看起来它应该可以工作,但如果我尝试它就会得到这个 "
:2: bad argument #1 to pairs (table expected, got nil) stack traceback: [G]: in function 'pairs' :2: in main chunk [G]: ?" -
如果你照我说的话,我假设
nodeSets的顶层结构可能需要是spec.nodeSets。由于问题中的代码不是我熟悉的 Lua 表的表示,因此无法确定正确的值路径。我的另一个假设之一是- config行表示嵌套表的开头并存储在数字索引中。如果您还有其他问题,请提供一些有关如何将数据结构加载到 Lua 中的信息。 -
我从示例中删除了非常特定于我的环境的内容,即完整路径是“obj.spec.nodeSets”。文件格式为 yaml,其中 nodeSets 下有一个包含 2 个元素的数组(名称为 data 和 master 的 2 个配置元素)。我只对此类数组项中每个元素的“计数”值感兴趣。一旦我看到哪些信息对您有帮助,我会尽量让问题更清楚。
-
如果路径是
obj.spec.nodeSets,那么local sum = 0; for _,node in pairs(obj.spec.nodeSets) do sum = sum + node.count end应该可以工作。如果您使用任何特定的库来解析 yaml,这将是一个很好的问题。