Multi-dimensional Lists


Since lists can contain any type as elements, they can also contain other lists. This allows multi-dimensional lists, sometimes called "matrices", to be created.

A multi-dimensional list can be created directly as before:

-- initialize a table with values

local x = {
    { "a", "b", "c" },
    { "d", "e", "f" },
    { "g", "h", "i" },
}

Now, when we access the direct descendants of this list we get the nested list. We can access the nested elements themselves by indexing the nested lists:

-- access values stored in the table

print(x[1]) -- table: 0x5e35821553e0

print(x[1][1]) -- a
print(x[1][2]) -- b
print(x[1][3]) -- c

We can also create multi-dimensional lists programmatically as well. In this example we create the list and add elements in a loop:

-- initialize an empty list

local x = {}

for i = 1, 3 do
    -- instantiate an empty list to contain the nested content
    local inner = {}

    for j = 1, 3 do
        inner[j] = string.char(97 + 3 * (i - 1) + (j - 1))
    end

    x[i] = inner
end

This makes use of the string.char function to generate characters from their decimal ASCII codes.

After the list is created, its elements can be accessed as usual:

-- access values stored in the table

print(x[1][1]) -- a
print(x[1][2]) -- b
print(x[1][3]) -- c

print(x[2][1]) -- d
print(x[2][2]) -- e
print(x[2][3]) -- f

print(x[3][1]) -- g
print(x[3][2]) -- h
print(x[3][3]) -- i