【问题标题】:Operating over nested table items in LUA在 LUA 中对嵌套表项进行操作
【发布时间】: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,这将是一个很好的问题。

标签: lua scripting


【解决方案1】:

要从每个配置中访问 count 值,您不一定需要遍历嵌套结构,这需要多个嵌套 for 循环。 想一个像

这样的结构
letters = {
    a = {1, 2, 3, 4, 5},
    b = {6, 7, 8, 9, 10},
    c = {11, 12, 13, 14, 15},
}

这里我们需要 2 个 for 循环,一个用于检索字母中的项目,一个用于检索这些项目中包含的所有嵌套。

只需 1 个循环即可解决您的问题。我们只需要遍历表 nodeSets 并索引存储在该表中的每个值的计数。

local sum = 0; 
for _,node in pairs(obj.spec.nodeSets) do
    sum = sum + node.count 
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多