# Lua Iterating tables

## Example

The Lua standard library provides a `pairs` function which iterates over the keys and values of a table. When iterating with `pairs` there is no specified order for traversal, even if the keys of the table are numeric.

``````for key, value in pairs(input_table) do
print(key, " -- ", value)
end
``````

For tables using numeric keys, Lua provides an `ipairs` function. The `ipairs` function will always iterate from `table`, `table`, etc. until the first `nil` value is found.

``````for index, value in ipairs(numeric_table) do
print(index, ". ", value)
end
``````

Be warned that iteration using `ipairs()` will not work as you might want on few occasions:

• `input_table` has "holes" in it. (See the section on "Avoiding gaps in tables used as arrays" for more information.) For example:

``````table_with_holes = { = "value_1",  = "value_3"}
``````
• keys weren't all numeric. For example:

``````mixed_table = { = "value_1", ["not_numeric_index"] = "value_2"}
``````

Of course, the following also works for a table that is a proper sequence:

``````for i = 1, #numeric_table do
print(i, ". ", numeric_table[i])
end
``````

Iterating a numeric table in reverse order is easy:

``````for i = #numeric_table, 1, -1 do
print(i, ". ", numeric_table[i])
end
``````

A final way to iterate over tables is to use the `next` selector in a generic `for` loop. Like `pairs` there is no specified order for traversal. (The `pairs` method uses `next` internally. So using `next` is essentially a more manual version of `pairs`. See `pairs` in Lua's reference manual and `next` in Lua's reference manual for more details.)

``````for key, value in next, input_table do
print(key, value)
end
`````` PDF - Download Lua for free