2012-05-19 26 views
0

我該如何編寫一個函數來遍歷一個「頁」值的數據?示例代碼將是理想的...如何通過Lua表中的數據「翻頁」用作字典?

所以說我們圖像的大小是一個頁面的5個項目。如果我們有一個Lua表,18個項目將需要打印出:

  • 第1頁:1至5
  • 第2頁:6〜10
  • 第3頁:11〜15
  • 頁4:16〜18

所以假設數據是這樣的:

本地數據= {} 數據[ 「狗」] = {1,2,3} 數據[「cat」] = {1,2,3} data [「mouse」] = {1,2,3} data [「pig」] = {1,2,3} 。 。 。

如何將一個代碼,將做到這相當於功能:

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

所以其實我什至不知道如果用作字典一個Lua表,甚至可以做到這一點?在這樣的表格中沒有特定的順序,所以當你回到打印頁面2時,你如何確定訂單是相同的?

回答

2

next函數允許您按順序瀏覽表格(儘管是不可預測的)。例如:

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 

我知道這不像你以前的形式,但我相信它可以很容易地適應。

next函數返回表中提供的鍵以及其值。當到達表的末尾時,它返回nil。如果您提供nil作爲第二個參數,它會返回表中的第一個鍵和值。它也記錄在in Corona,雖然它看起來是相同的。

+0

謝謝 - 我實際上使用Corona所以沒有遇到「下一個」(沒有在Corona API中看到它,但也許他們只有一些lua函數在那裏?即在http:// developer。 anscamobile.com/reference) - 會試試這個 – Greg

+0

看來Corona確實包括了它,因爲它記錄在這裏(http://developer.anscamobile.com/reference/index/next)。 –

+0

很好的答案。我只是補充強調它是*一個*順序 - 但是這個順序是**不可預測的(即它不是插入順序或任何東西)。在作爲詞典處理表格時,這是一個非常常見的問題。 – MattJ