Lua - Tables as Arrays
Introduction
Array is an ordered arrangement of objects, which may be a one-dimensional array containing a collection of rows or a multi-dimensional array containing multiple rows and columns.
In Lua, arrays are implemented using indexing tables with integers. The size of an array is not fixed and it can grow based on our requirements, subject to memory constraints. We should ensure that arrays indexes are continous.
Example - Creation and Manipulation of Array
Arrays can be created in Lua using a constructor expression {} as an empty array. Then using a numeric for loop, we can assign values to the array as shown below.
main.lua
-- empty array
array = {}
-- assign values to the array
for i=1, 10 do
array[i] = i
end
-- add a value to the array
array[11] = 11
-- get a value of Array
print(array[5])
-- if index is not present, output will be nil
print(array[12])
Output
When you build and execute the above program, it produces the following result −
5 nil
Example - Creation and Manipulation of Array with negative indexes
By default, array index starts from 1 instead of 0 like in C, Java languages. But as array is implemented using tables, we can use negative indexes as well.
main.lua
-- empty array
array = {}
-- assign values to the array
for i= -5, 5 do
array[i] = i
end
-- add a value to the array
array[6] = 6
-- get a value of Array
print(array[-2])
-- if index is not present, output will be nil
print(array[-6])
Output
When you build and execute the above program, it produces the following result −
-2 nil
Example - Creation and Initialization of Array in single statement
We can initialize an array while creation as well. In example below, we've created arrays of numbers and strings.
main.lua
-- array of numbers
numbers = { 1, 2, 3, 4, 5 }
-- arrays of names
names = {"Robert", "Julia", "Adam" }
-- print a number at index 3
print(numbers[3])
-- print a name at index 2
print(names[2])
Output
When you build and execute the above program, it produces the following result −
3 Julia
Example - Traversing through an array
Array is implemented by tables and is using numeric indexes. So it is best to navigate using ipairs() iterator to get all values of an array as shown below:
main.lua
-- array of numbers
numbers = { 11, 12, 13, 14, 15 }
-- print all numbers
for index, number in ipairs(numbers) do
print(index, number)
end
-- arrays of names
names = {"Robert", "Julia", "Adam" }
-- print all names
for index, name in ipairs(names) do
print(index, name)
end
Output
When you build and execute the above program, it produces the following result −
1 11 2 12 3 13 4 14 5 15 1 Robert 2 Julia 3 Adam