Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I loop through a 2D array in lua

I am attempting to make a WoW addon and am saving some guild data in a 2D array. I have successfully saved the data to the array but am having trouble getting it back out.

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

Everything seems to work but for the last nested for loop. Just a note, my array may skip numbers. I have Google it but most of the questions asked knew how long their array was and I do not. Thanks for the help!

like image 579
Lavick Avatar asked Dec 06 '25 14:12

Lavick


1 Answers

Try using a numerical for loop instead of a generic one.

-- The # operator gets the length of a table
for i = 1, #guildMembers, 1 do
    print(i.." - Name: "..guildMembers[i][1].."; XP: "..guildMembers[i][2]);
end

Or you could use a dictionary:

local guildMembers = {
    name1 = weeklyXP1;
    name2 = weeklyXP2;
};
for name, xp in pairs(guildMembers) do
    print(name..": "..xp);
end
like image 193
dr01d3k4 Avatar answered Dec 08 '25 07:12

dr01d3k4



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!