Lua - Loop through Table
Table is one of the most popular construct. A table can be in numerically indexed form or in a key-value pairs based associated form.
It is very important to know various ways to loop through a table.
Based on type of table, We can use following types of inbuilt iterators to loop through table entries.
next− this is an inbuilt function to give the next value from the table when invoked. This iterator is mainly used in generic for loop and for associated table.
ipairs()− this iterator uses default keys starting from 1 and is useful where table is not having any explicit keys. It is useful for numerically indexed tables.
pairs()− this iterator is useful when table is having explicit keys.
Let's see each one of the above functions to iterate values of a table.
Example - Using next function
next function accepts a table and index to return the next value of the table.
next(table, [, index])
Here next function returns the associated value from the table as per index. If index is nil, then first value is returned. Following example showcases the same−
main.lua
-- initialize a table of days with associative keys
days = {["Mon"] = "Monday",["Tue"] = "Tuesday",["Wed"]="Wednesday",["Thu"] = "Thursday"
,["Fri"] = "Friday",["Sat"] = "Saturday",["Sun"] = "Sunday"
}
-- print the entries of table along with keys
for key,value in next,fruits do
print(key,value)
end
Output
When the above code is built and executed, it produces the following result −
Mon Monday Fri Friday Sun Sunday Tue Tuesday Sat Saturday Wed Wednesday Thu Thursday
Example - Using pairs iterator
pairs iterator function returns key-value pairs and is mainly used in associative tables. Keys are preserved but order is not preserved. See the example below−
main.lua
-- initialize a table of days with associative keys
days = {["Mon"] = "Monday",["Tue"] = "Tuesday",["Wed"]="Wednesday",["Thu"] = "Thursday"
,["Fri"] = "Friday",["Sat"] = "Saturday",["Sun"] = "Sunday"
}
-- print the entries of table along with keys
for key,value in pairs(days) do
print(key,value)
end
Output
When the above code is built and executed, it produces the following result −
Fri Friday Mon Monday Tue Tuesday Thu Thursday Sun Sunday Sat Saturday Wed Wednesday
Example - Using ipairs iterator
pairs iterator function returns index-value pairs and is mainly used in tables without associative keys. See the example below−
main.lua
-- initialize a table of days with associative keys
days = {"Monday","Tuesday","Wednesday","Thursday","Friday",
"Saturday","Sunday" }
-- print the entries of table along with keys
for key,value in ipairs(days) do
print(key,value)
end
Output
When the above code is built and executed, it produces the following result −
1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday 7 Sunday
Example - Using while loop
Following is an example of using a while loop to navigate through a numeric indexed table.
main.lua
-- Initialize an array
numbers = {11, 22, 33, 44, 55, 66}
index = 1
-- loop through array until index is greater than size of table
while( index <= #numbers )
do
print(index, numbers[index])
index = index+1
end
Output
When we run the above program, we will get the following output−
1 11 2 22 3 33 4 44 5 55 6 66