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
Advertisements