如何在lua中遍历二维数组

我正在尝试制作一个 WoW 插件,并将一些公会数据保存在一个二维数组中。我已经成功将数据保存到数组中,但是无法将其取出。

local playerName = UnitName("player");
ChatFrame1:AddMessage('Hi my name is: ' .. playerName);

local guildMembers = {}

local totalMembers, onlineMembers = GetNumGuildMembers();
local visibleMembers = onlineMembers;
local guildMembers = {}

if ( GetGuildRosterShowOffline() ) then
   visibleMembers = totalMembers;
end

for index=1, visibleMembers do
   local name = GetGuildRosterInfo(index);
   local weeklyXP = GetGuildRosterContribution(index);
   guildMembers[index] = {}
   guildMembers[index][1] = name;
   guildMembers[index][2] = weeklyXP;
   --DEFAULT_CHAT_FRAME:AddMessage('name: '..guildMembers[index][1]..' weeklyXP: '..guildMembers[index][2]);
end

for i, v in pairs(guildMembers) do
   for j, v2 in pairs(i) do
      print(i.. ': ' ..v.. ' xp: ' ..v2);
   end
end

所有东西似乎都很顺利,但是最后一个嵌套循环出了问题。请注意,我的数组可能会跳过一些数字。我已经在Google上搜索过,但大多数问题都是询问数组的长度,而我并不知道。谢谢帮助!

点赞
用户3002352
用户3002352

尝试使用数字循环而不是通用循环。

-- # 运算符获取表的长度
for i = 1, #guildMembers, 1 do
    print(i.." - 名字: "..guildMembers[i][1].."; 经验: "..guildMembers[i][2]);
end

或者你可以使用字典:

local guildMembers = {
    name1 = weeklyXP1;
    name2 = weeklyXP2;
};
for name, xp in pairs(guildMembers) do
    print(name..": "..xp);
end
2013-12-09 22:58:34
用户869951
用户869951

你应该在内部循环中使用pairs(v),而不是pairs(i),我认为你想使用..j..而不是..v..

   for j, v2 in pairs(v) do
      print(i.. ': ' ..j.. ' xp: ' ..v2);
   end

但是你应该在内部使用map,如下所示

guildMembers[index] = {name=name, xp=weeklyXP}

然后内部循环变成

   for j, v2 in pairs(v) do
      print(i.. ': ' ..j.. ' = ' ..v2);
   end
2013-12-10 00:31:11