我怎样将表名指定为变量?

我在lua中有一个包含一些数据的表格。

sometable = {
    {name = "bob", something = "foo"},
    {name = "greg", something = "bar"}
}

然后我想循环遍历这个表格,为每个名称分配一个数字作为变量。我是lua的新手,尝试像这样做。

for i,t in ipairs(sometable) do
    t.name = i
end

我之后期望 print(“name1”,bob)会给我 name1 = 1。但现在我得到了 nil。所以我回到了我丑陋的静态变量列表,直到有人告诉我我是个笨蛋为止。

原文链接 https://stackoverflow.com/questions/271406

点赞
stackoverflow用户35339
stackoverflow用户35339

ipairs 函数只能以升序迭代数值索引的表。

你需要使用的是 pairs 函数。它可以迭代表中的每个键,无论它是什么类型。

2008-11-07 07:06:48
stackoverflow用户33252
stackoverflow用户33252
> sometable = {{name = "bob", something = "foo"},{name = "greg", something = "bar"}}
> for i,t in ipairs(sometable) do t[t.name] = i end
> for i,t in ipairs(sometable) do for j,u in pairs (t) do print (j,u) end end
name  bob
something foo
bob   1
greg  2
something bar
name  greg
> return sometable[1].bob
1>
sometable = {{name = "bob", something = "foo"},{name = "greg", something = "bar"}}
for i,t in ipairs(sometable) do
    t[t.name] = i
end

for i,t in ipairs(sometable) do
    for j,u in pairs(t) do
        print(j, u)
    end
end

return sometable[1].bob

输出结果:

name  bob
something  foo
bob  1
greg  2
something  bar
name  greg
1
2008-11-08 00:46:06