2016-09-28 98 views
1

這是腳本:此訂購是否有保證?

local data = 
{ 
    { "data1", "1"}, 
    { "data5", "2"}, 
    { "3453453", "3"}, 
    { "zzz",  "4"}, 
    { "222",  "5"}, 
    { "lol",  "6"}, 
    { "asdf",  "7"}, 
    { "hello", "8"}, 
} 

local function test() 
local count = #data 
    for i = 1, count do 
    print(data[i][1] .. " = " .. data[i][2]) 
    end 
end 

test() 

保證輸出:

data1 = 1 
data5 = 2 
3453453 = 3 
zzz = 4 
222 = 5 
lol = 6 
asdf = 7 
hello = 8 

如果沒有,那麼爲什麼,什麼是最好的方式表現明智的這樣呢?

+0

爲什麼不輸出它? –

+1

我讀了一些關於對VS Ipairs沒有返回固定順序的結果,我想也許使用索引#可能是相同的? – paulm

回答

4

我讀一些有關對VS ipairs沒有返回結果的固定順序

ipairs是一個表的陣列元件的一個迭代中,爲了從第一個到最後。 「數組元素」定義爲表格的成員,其鍵值爲範圍[1, #tbl]上的數值,其中#tbl是應用於該表的長度運算符。

pairs是一個遍歷的迭代器,所有的表中的元素:數組和非數組元素都一樣。表的非數組元素沒有Lua的內在順序,所以pairs將以任何順序返回它們。即使數組元素在技術上有一個訂單,pairs不會爲他們例外,它總是以任意順序操作。

您的代碼的工作原理與ipairs類似:將表格中的每個數字鍵從1長度迭代到其長度。

+0

我很困惑..我的桌子上沒有「數字鍵」?他們都是字符串? – paulm

+1

@paulm:「*我的表沒有」數字鍵「*」當您使用沒有鍵的值創建表時,Lua會自動爲這些值分配數字鍵。 –

+1

阿賓果,這是我失蹤的一點! – paulm