Lua中ipairs和pairs的區別詳解

迭代器for遍歷table時,ipairs和pairs的區別:spa

區別一:ipairs遇到nil會中止,pairs會輸出nil值而後繼續下去code

區別二:blog

local a = {"Hello", "World", a = 1, b = 2, x = 10, y = 20, "Good", nil, "Bye"} -- for i,v in ipairs(a) do -- print(v) -- end
for k,v in pairs(a) do
    print(k,v) end

可見:ipairs並不會輸出table中存儲的鍵值對,會跳過鍵值對,而後順序輸出table中的值,遇到nil則會中止。索引

而pairs會輸出table中的鍵和鍵值對,先順序輸出值,再亂序(鍵的哈希值)輸出鍵值對。ip

這是由於,table在存儲值的時候是按照順序的,可是在存儲鍵值對的時候是按照鍵的哈希值存儲的,並不會按照鍵的字母順序或是數字順序存儲。get

=》對於a來講,若是執行print(a[3]),輸出的結果也會是Good。也就是說table並不會給鍵值對一個索引值。io

也就是說,ipairs知識按照索引值順序,打印出了table中有索引的數據,沒有索引值的無論。table

而pairs是先按照索引值打印,打印完成後再按照鍵值對的鍵的哈希值打印它的值。function


 

因此,怎麼順序輸出一個table裏面的鍵值對?class

local tab = { key1 = 1, key2 = 2, key3 = 3, key4 = 4, key5 = 5, key6 = 6, key7 = 7, } function getLen(tab) local len = 0
    for _,v in pairs(tab) do len = len + 1
    end
    return len end

local key for i=1,getLen(tab) do key = "key"..i print(key, tab[key]) end
相關文章
相關標籤/搜索