Demystifying Lua Iteration: What are ipairs() and pairs()?

Lua offers powerful ways to iterate through tables, and understanding ipairs() and pairs() is crucial. Let’s break down these functions simply.

Understanding ipairs()

local myTable = { "Foobar", "Foobaz" }
for i, v in ipairs(myTable) do
  print(i.." "..v)
end

In this loop:

  • for: This keyword initiates the loop, meaning “for each item”.
  • i: This variable represents the index or iteration number. Think of it as counting each element in order. You can name it anything you like, but i for index is common.
  • v: This variable represents the value at the current index. In each step of the loop, v will hold an element from myTable. Again, you can choose a different name if you prefer. This is essentially myTable[i].
  • ipairs(myTable): This is the core of ipairs(). It iterates over the table myTable in sequential numerical order, starting from index 1. It returns the index (i) and the value (v) for each numerically indexed element.
  • do ... end: This block contains the actions to be performed in each iteration of the loop.

Put simply, ipairs() says: “For each numerically indexed value (v) found in myTable, along with its index (i), perform the following actions.”

When you run this code, you’ll see:

1 Foobar
2 Foobaz

Here, i starts at 1 because it’s the first index, and v is “Foobar”, the value at that index. Then, i becomes 2 (the second index), and v becomes “Foobaz”.

Exploring pairs()

local quotes = { ["Class S"] = "Lorem Ipsum", ["Class A"] = "The Quick Brown Fox" }
for k, v in pairs(quotes) do
  print(k.." "..v)
end

If you’re comfortable with ipairs(), pairs() will be easy to grasp.

  • k: This variable represents the key. In Lua tables, keys can be strings, numbers, or other types. pairs() lets you access elements using these keys. You can rename k as needed.
  • v: This variable is still the value, but now it’s accessed using the key k. So, v is equivalent to quotes[k]. You can rename v if you wish.
  • pairs(quotes): Unlike ipairs(), pairs() iterates over all key-value pairs in the table quotes, regardless of the key type or order. It returns the key (k) and the value (v) for each pair.

In essence, pairs() says: “For each value (v) in quotes, along with its associated key (k), perform these actions.”

Running this code outputs:

Class S Lorem Ipsum
Class A The Quick Brown Fox

Here, k is “Class S”, the key, and v is “Lorem Ipsum”, the value associated with that key. Similarly for “Class A” and “The Quick Brown Fox”.

Quick Tip: Ignoring Index or Key

Sometimes you only need the value and not the index or key. In Lua, you can use _ to indicate a variable you don’t intend to use.

For example: for _, v in ipairs(myTable) do ... end will only give you the values (v), ignoring the indices. This can be slightly more efficient as it avoids creating a variable that isn’t used.

Understanding ipairs() and pairs() is fundamental for working with tables in Lua. ipairs() is your go-to for ordered, numerically indexed arrays, while pairs() is essential for iterating through all key-value pairs in a table.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *