Multidimensional Tables Layers

So basically I have a table inside another table. That table has a metatable attached to it and the function starts there. I need to find a way to get the key of the table that same metatable is attached to, from one of the metatable’s functions

Sounds like you are putting objects in a table like as objects in Lua can be presented as a table with a metatable sample car object:

Sample car object example with metatable
Car = {}
Car.__index = Car

function, driver, model)
    local newcar = {}
    setmetatable(newcar, Car)

    newcar.Position = position
    newcar.Driver = driver
    newcar.Model = model

    return newcar

function Car:Boost()
    self.Speed = self.Speed + 5

function Car:PrintKey()
	print(self.Name.." is inside garage number: "..self.Index)

Moreover, you want these objects to know the key of the table it’s nested inside I believe.

local randomTable = {Object1,Object2}

--Object 1 is inside this table with key = 1
--Object 2 is inside this table with key = 2

Unfortunately, from my limited knowledge of metatables, I believe there is no way for object 1 to know it’s nested inside the table unless we give the information to object 1 directly like Object1.Index = 1 . However, I believe it’s possible to do this process automatically using Metamethods like so by tracking the parent table using the sample car object such that it should fit your requirements of the finding:

Stolen from this metamethod tutorial.

local Car = require(script.Car)

local jeep =
jeep.Name = "Jeep"

local function TrackDownTable()
	local t = {}
	local proxy = setmetatable({}, {
		__index = function(_, key)
			return t[key]
		__newindex = function(_, key, value)
			value.Index = key
			t[key] = value
	return proxy

local Garage = TrackDownTable()

Garage[1] = jeep


Garage[5] = jeep


Garage["VIP_garage"] = jeep


Print statements:

  Jeep is inside garage number: 1
  Jeep is inside garage number: 5
  Jeep is inside garage number: VIP_garage

I wonder if there is a better solution other than manually storing the identifying index like so within that table.

Would there at least be a way to know what the key to access that table is or would I have to explicitly give that information to the method?

To visualize it:

local tables = {Key1 = {}, Key2 = {}}

local metatable = {
    __newindex = function(this, key, value)
        --I want to know the key here

tables.Key1 = setmetatable({}, metatable)

To summarize this, I would want the method with the comment to know that the key to this is Key1.

To be fair I’ve already found a way to feed it the information, but I still would like to know if there is any way to do what I ask for the future.

Eh, sorry the only way I know how is to do a reverse key value pair search for your visualization

local tables = {Key1 = {}, Key2 = {}}

local metatable = {
	__newindex = function(this, key, value)
		--I want to know the key here
		for i,v in pairs(tables) do
			if this == v then

tables.Key1 = setmetatable({}, metatable)
tables.Key1[2] = 5

Print statement:


However, then you would need to find the place where Key1={} is nested in. The only solution I found is to use a linked list from this scripting helper post from a post to find the Parent of a table.

Yeah, there is no way to find the parent of a table from a quote I found on the forum which I think makes sense:

Tables don’t have parents, because they are not instances in a game. So what I mean is you would access something in the game by saying script.Parent or game.ServerStorage or game.Lighting.

Tables don’t store where they are stored by themselves from this statement if it’s true which I believe it is.

1 Like