Visualizing Tables

I use tables alot, and wanted to know if there is any other way other than printing your tables, to see the contents of a table and the contents of its sub tables if it has any etc.

By this I’m assuming you just mean print(table)?

There’s really no way to visualize a table without printing its contents.

A simple way to visualize a table is to do print(unpack(table)). For example:

local myTable = {1, 2, 3}
print(unpack(myTable))
-- Output >> 1 2 3

If a table can have subtables, then you can loop through the table and unpack the index if it is another table. For example:

local myTable = {
	1,
	{2, 3},
	4,
}
local function visualizeTable(tbl) -- works for dictionaries as well
	for index, content in ipairs(tbl) do
		if type(content) == "table" then
			print(index, "-", unpack(content))
		else
			print(index, "-", content)
		end
	end
end
visualizeTable(myTable)
--[[
Output:
1 - 1
2 - 2 3
3 - 4
--]]

If subtables can have their own subtables, then you need to add a bit of recursion, unpacking each of the tables. It can get a bit complicated to have it visualize neatly when you have to deal with multiple subtables, so I won’t get into that here. Hopefully what I’ve given you is enough.

3 Likes

Here is a recursive function that prints tables with indenting to help indicate sub-tables.

local printTable -- declare beforehand for recursion purposes
printTable = function(t, s)
	s = s or 0
	print(string.rep("\t", s).."{")
	for i, v in pairs(t) do
		if (typeof(v) ~= "table") then
			print(string.rep("\t", s + 1).."["..tostring(i).."]: "..tostring(v))
		else
			print(string.rep("\t", s + 1).."["..tostring(i).."]:")
			printTable(v, s + 1)
		end
	end
	print(string.rep("\t", s).."}")
end
5 Likes

If you’re using the new expressive output beta, you should be able to just print a table directly.

Alternatively, you could always use Repr to print the table until the new output window releases.

3 Likes