Greg
Greg

Reputation: 34818

how to "page" through the data in a Lua table used as a dictionary?

How would I code a function to iterate through one "pages" worth of data? Sample code would be ideal...

So say we image the size of a page is 5 items. If we had a lua table with 18 items it would need to print out:

So assume the data is something like:

local data = {}
data["dog"] = {1,2,3}
data["cat"] = {1,2,3}
data["mouse"] = {1,2,3}
data["pig"] = {1,2,3}
.
.
.

How would one code the function that would do the equivalent of this:

function printPage (myTable, pageSize, pageNum)
  -- find items in "myTable" 
end

So in fact I'm not even sure if a Lua table used as a dictionary can even do this? There is no specific ordering is there in such a table, so how would you be sure the order would be the same when you come back to print page 2?

Upvotes: 0

Views: 250

Answers (1)

Harry Cutts
Harry Cutts

Reputation: 1424

The next function allows you to go through a table in an order (albeit an unpredictable one). For example:

data = { dog = "Ralf", cat = "Tiddles", fish = "Joey", tortoise = "Fred" }

function printPage(t, size, start)
    local i = 0
    local nextKey, nextVal = start
    while i < size and nextKey ~= nil do
        nextKey, nextVal = next(t, nextKey)
        print(nextKey .. " = " .. nextVal)
        i = i + 1
    end
    return nextKey
end

local nextPage = printPage(data, 2)  -- Print the first page
printPage(data, 2, nextPage)         -- Print the second page

I know this isn't quite in the form you were after, but I'm sure it can be adapted quite easily.

The next function returns the key after the one provided in the table, along with its value. When the end of the table is reached, it returns nil. If you provide nil as the second parameter, it returns the first key and value in the table. It's also documented in Corona, although it appears to be identical.

Upvotes: 2

Related Questions