Page 1 of 1

Updating/referencing a hierarchial table

Posted: Sun Sep 06, 2020 10:56 pm
by duckman
Hello. I'm trying to capture group status, and put the results in a table, where the key is the character name and each character has in turn attribute values (hp, mana, etc).

I wasn't able to get this to work with table.insert, because that requires a numerical index, so I did this:
Code: [show] | [select all] lua

function GroupAdd(name, xhp, xmaxhp)
  if table.contains(grouplist, name) ~= true then
    local temptable = ({[name] = { ["hp"] = xhp, ["maxhp"] = xmaxhp}})
    table.insert(grouplist, temptable)
    return true
  end
end
That gets an entry in there. However I can't figure out how to reference the data in other commands - in particular to update it if the current HP changes, or to get the HP of a character by name.

I think it's just a rookie programming mistake, where I don't know the syntax for referencing the table correctly. Can someone lend a hand, or is there a better way to accomplish this? Thanks!

Re: Updating/referencing a hierarchial table

Posted: Mon Sep 07, 2020 12:27 am
by demonnic
To add an element to a table at a specific key, you just reference the key directly. So...
Code: [show] | [select all] lua
grouplist = grouplist or {}
function GroupAdd(name, hp, maxhp)
  grouplist[name] = {hp = hp, maxhp = maxhp }
end

Re: Updating/referencing a hierarchial table

Posted: Mon Sep 07, 2020 1:27 am
by duckman
Thanks so much, I really appreciate it. I figured the answer was simple. I think I've got it now!

Re: Updating/referencing a hierarchial table

Posted: Mon Sep 07, 2020 2:42 pm
by duckman
So, my next challenge is sorting the key/value table based on an arbitrary field. For example lets narrow it down to the character name (as a key) and their current HP, which is what I want to sort by. I've gotten the below simplified example but it doesn't seem to actually sort - I'm sure it's something simple I'm missing?
Code: [show] | [select all] lua
charlist = {["Meatbag"] = 50, ["Tom"] = 90, ["Joe"] = 70}

table.sort(charlist, function(a, b)
  if charlist[a] > charlist[b] then
    return true
  else
    return false
  end
end
)

display(charlist)


After I run the command the output is still the unordered list. What am I doing wrong?

Re: Updating/referencing a hierarchial table

Posted: Mon Sep 07, 2020 3:18 pm
by demonnic
table.sort doesn't work with keyed tables, just ones with sequential numerical indices. Lua does not guarantee the order of keyed tables, so there's some extra work required to get that sort of thing working.

If you wanna join us on discord we can maybe help get you setup a little better. There are a few directions you could go but it depends in part on what your end goal is.