遍历表格中的表格

我有这个表local cookies = {{["name"]=23, ["value"]=333}, {["name"]=222, ["value"]=33233}},我想遍历子表来查找具有正确"name"的子表。这是我尝试过的内容

  for _,elm in ipairs(cookies) do
    for k,v in ipairs(elm) do
      print(k)
      if k == "name" and v == 222 then
          print(v)
      end
    end
  end

在外部 for 循环中,它确实显示了它看到了两个表,但它甚至没有进入内部 for 循环 - 为什么?如何找到子表,使其"name"等于某个值?

点赞
用户2616735
用户2616735

ipairs只会对键值为1, 2, 3, …的进行迭代,因此它不会访问键名为“name”的键。如果要访问所有键名,使用pairs(但要注意迭代的顺序是不可预测的)。

但是,在您的示例中,您根本不需要内部循环。您可以仅仅使用elm.name来获得元素的名称:

for _, elm in ipairs(cookies) do
    if elm.name == "222" then
        print(elm.name, elm.value)
    end
end

实际上,如果您不需要排序或需要支持重复的cookie名称,您的cookies表可以变成一个名称=>值的字典,使您可以在没有循环的情况下编写此代码:

print(cookies["222"]) --> 33233
2019-01-27 18:46:06