2013-10-08 13 views
9

İşte yukarıdaki ilk query sonra count yazdırır bir örnekBir Lua tablosunun sırasını dize tuşları ile nasıl saklayabilirim?

local query = {} 
query['count'] = 1 
query['query'] = 2 
for k,v in pairs(query) do 
    print(k) 
end 

bu.

Tablodan geçerken anahtar dizelerinin sırasını koruyacak bir int dizin anahtarı eklemeden nasıl emin olabilirim?

+0

Sözlük tabloları ile aynı siparişi koruyacağına inanmıyorum. Bir sipariş vermek istiyorsanız, istediğiniz sırayla alanları içeren ikinci bir dizinlenmiş tablo oluşturmanızı öneririm. Ardından, bu tablodan geçiş yapın ve bunun yerine [v] numaralı telefonu arayın. – Josh

cevap

9

Yorumda cevap verdim, ama neden bahsettiğimi daha iyi bir fikir vermek için buraya taşıyorum.

local queryindex = {"count", "query"} 
local query = {} 
query['count'] = 1 
query['query'] = 2 

for _,v in ipairs(queryindex) do 
    print(query[v]) 
end 
böyle
+0

'for' döngüsünüzün gövdesi sadece sayıları yazdıracaktır, 'print (v)' demek istediniz? –

+0

Hayır, tam olarak ne cevap verdiğimi kastediyorum. Ben sorgu ['saymak'] ve sorgu ['sorgu'] gerçekten sayılar değil, dizeleri olduğunu varsayarak, ve sadece konumlandırma göstermek için numaraları kullanıyordum. print (v) 'yalnızca 'sayım' veya 'sorgu' yazacak ve 'sorgu' tablosundaki değerlerini değil. – Josh

+0

Bu doğru değil. ipairs() bir tablodaki * tamsayı * tuşları ile sipariş öğelerini ve bu elemanları tuşlarla yok saymaz. – Jinfeng

2

Sürece değeri, bir sekansı inşa edebilirsiniz örneğinde olduğu gibi, deliksiz ve iki kopya olmadan bazı N, 1, 2, 3 ile ilgili olması sağlanır olarak ters kullanarak anahtar değer çifti :

Lua olarak
local seq = {} 
for k,v in pairs(query) do 
    seq[v] = k 
end 

for _,v in ipairs(seq) do 
    print(v) 
end 
1

, 1 tabanlı bir ardışık tamsayı şifreler (aka dizi tablo), tek tablolar için çözümlenebilir. sırayla bir tablo t ayrıştırmak istiyorsanız

Yani, sen ne yaparsın:

  • keys tablo
  • keys kullanarak o sıralanırken bir dizi benzeri tabloya
  • içine anahtarları toplayarak t üzerinde yineleme tablosu.

Örnek:

function sortedKeys(query, sortFunction) 
    local keys, len = {}, 0 
    for k,_ in pairs(query) do 
    len = len + 1 
    keys[len] = k 
    end 
    table.sort(keys, sortFunction) 
    return keys 
end 

... 

local query = {} 
query['count'] = 1 
query['query'] = 2 
for _,k in pairs(sortedKeys(query)) do 
    print(k, query[k]) 
end 

Biraz daha deyimsel bunu an iterator oluşturmak da mümkündür, ama gerek yoktu.

İlgili konular