如何从lua表中获取信息?



我有一些像这样的lua代码:

_table = {
stuff = {
item1 = {Name="Stack",Rarity="Over"};
item2 = {Name="Flow",Rarity="Com"}
};
};
print("placeholder") -- example thing
_stuff = _table.stuff
for i = 1, #_stuff do
print(_stuff[i].Name)
end

输出如下:placeholder

我试着看一些东西,但我认为这与我的问题无关。

Lua表在概念上是"映射":它们将键映射到值。表_table将键stuff映射到表{item1 = ..., item2 = ...}。您的stuff表将字符串"item1"映射到{Name="Stack",Rarity="Over"}表,将字符串"item2"映射到{Name="Flow",Rarity="Com"}表。

长度运算符#完全忽略字符串键。它返回一个整数i,这样t[i] ~= nil and t[i+1] == nil。特别是,如果表中没有整数键,它返回0。这就是stuff表的情况:您只有字符串键。因此,您的循环永远不会运行,因为限制是0,而i = 1 > 0在第一次循环迭代之前已经是这种情况。

简单地说,就是试图遍历一个"字典"。(一个带有字符串键的表)就好像它是一个列表。Lua表既有"列表部分"又有"列表部分"。(从1n的整数键,通常是n = #t)和一个"哈希部分";(所有其他的钥匙)。"列表"部分在您的例子中为空,因此没有任何东西可供您迭代。

要以未定义的顺序遍历任何表(列表或字典)的所有键值对,请使用pairs(而不是ipairs或遍历索引i,这只适用于列表):

for itemname, item in pairs(_stuff) do
print(item.Name)
end

如果您想要定义迭代顺序,要么构建第二个键表…

local order = {"item1", "item2"}
for _, key in ipairs(order) do
print(_stuff[key].Name)
end

…或者使用表的整数键("list part"):

_table = {
stuff = {
{key = "item1", Name="Stack", Rarity="Over"};
{key = "item2", Name="Flow", Rarity="Com"};
};
};
_stuff = _table.stuff
for _, key in ipairs(order) do
for i = 1, #_stuff do
print(_stuff[i].Name)
end
end

然后按预期工作。

相关内容

  • 没有找到相关文章

最新更新