user3576071
user3576071

Reputation: 11

Lua return index of a nested table

This is my first attempt to use Lua tables and I'm getting on with it quite well. I'm struggling with one thing though, heres (a small sample of) my table as it currently stands:

objects = {
["1/1/1"] = { tl = 1, startVal = 1, stopVal = 0 },
["1/1/2"] = { tl = 11, startVal = 1, stopVal = 0 },
["1/1/3"] = { tl = 22, startVal = 1, stopVal = 0 },
["1/1/4"] = { tl = 33, startVal = 1, stopVal = 0 },
}

The typical operation of this is that I use the "1/1/1" values as a lookup to the inner tables and then use those values in various functions. This all works well. Now, I need to go the other way, say I have tl = 22 coming in, I want to return the top value ("1/1/3" in this case).

I think I need to do something with the inpairs I keep seeing on the web but I'm struggling to implement. Any help would be massively appreciated.

Upvotes: 1

Views: 697

Answers (2)

Lukis
Lukis

Reputation: 652

isn't it better to take the value directly?

objects.1/1/1.tl

I don't know if it will work also with slashes, but if not, you may replace it by 'x' for example. Then it will be:

objects.1x1x1.tl

Upvotes: -2

Oliver
Oliver

Reputation: 29621

You can't use ipairs because your table is an associated array not a sequence, so you have to use pairs. Also, there is no search function builtin to Lua, so you have to loop over all items yourself, looking for the right field value:

function findTL(tbl)
    for key, data in pairs(tbl) do
       if data.tl == tlSearch then 
          return key
       end
    end
end

local key = findTL(objects, 22)

If you want something a tad more object-oriented you could do this:

objects.findTL = findTL -- ok because first arg is the table to search
local key = objects:findTL(22)

Upvotes: 0

Related Questions