Lua嵌套Table遍历:如何获取指定属性ammo的值?
解决Lua中只获取子表指定属性的问题
嘿,作为Lua新手碰到这种表遍历的问题太正常啦,我来帮你快速搞定!
你原来的循环之所以会打印整个table,是因为你把每个子table当成了数组结构(用v[1]、v[2]这种数字索引去取值),但实际上你的gun_info里每个子元素都是带命名键的表(比如rate、ammo这些是键名),所以得通过键名来访问对应的属性值。
修改后的代码示例
直接在循环里通过键名ammo来获取对应的值就好:
local gun_info = { g_sword={rate=0.5;spd=0;dmg=1;ammo=1;}; g_pistol={rate=0.5;spd=5;dmg=1;ammo=40;}; g_knife={rate=0.8;spd=5;dmg=1;ammo=1;}; g_shuriken={rate=0.3;spd=5;dmg=1;ammo=40;}; g_bomb={rate=0.8;spd=5;dmg=1;ammo=20;}; }; -- 只获取并输出每个子表的ammo值 for gun_name, gun_stats in pairs(gun_info) do -- 两种写法都可以:gun_stats.ammo 或者 gun_stats["ammo"] print(gun_name, gun_stats.ammo) end
运行这段代码后,你会看到输出类似:
g_sword 1 g_pistol 40 g_knife 1 g_shuriken 40 g_bomb 20
额外小技巧:收集所有ammo到新表
如果之后需要单独使用这些ammo值,还可以把它们收集到一个新的表中:
local ammo_collection = {} for gun_name, gun_stats in pairs(gun_info) do ammo_collection[gun_name] = gun_stats.ammo end -- 遍历新表查看结果 for name, ammo in pairs(ammo_collection) do print(name, ammo) end
这样你就可以随时通过ammo_collection.g_sword或者ammo_collection["g_pistol"]来快速获取对应武器的弹药数啦~
内容的提问来源于stack exchange,提问作者javaprogrammer
相关产品推荐
相关产品推荐

