2012-10-02 65 views
0

我對lua很新,我的計劃是創建一個表。此表(我稱之爲測試)有200個條目 - 每個條目都具有相同的子條目(在這個例子中,子項資金和年齡):lua表中有一個值的兩個索引

這是一種僞代碼:

table test = { 
    Entry 1: money=5 age=32 
    Entry 2: money=-5 age=14 
    ... 
    Entry 200: money=999 age=72 
} 

我怎樣才能寫在盧阿?有沒有可能?另一種方法是,我寫的每一個分項爲一個表:

table money = { } 
table age = { } 

但對我來說,這不是一個很好的方式,所以也許你能幫助我。

編輯:

這個問題Table inside a table是相關的,但我不能寫這個200倍。

回答

4

試試這個語法:

test = { 
    { money = 5, age = 32 }, 
    { money = -5, age = 14 }, 
    ... 
    { money = 999, age = 72 } 
} 

使用的例子:

-- money of the second entry: 
print(test[2].money) -- prints "-5" 

-- age of the last entry: 
print(test[200].age) -- prints "72" 
+0

但是,我怎樣才能使用表,而不寫200x?例如test [156] .money = 5和test [156] .age = 99 – swaechter

+0

@Albertus:我不明白你在問什麼。你試圖不寫「200x」是什麼「它」? –

+0

@Albertus:'local t = test [156]; t.money = 5; t.age = 99' – Mud

0

您還可以將這個問題上它的身邊,並在test 2個序列:moneyage其中的每一項都有兩個數組中的索引相同。

test = { 
    money ={1000,100,0,50}, 
    age={40,30,20,25} 
} 

這將有更好的表現,因爲你只有3表而不是n+1表,其中n是條目數的開銷。

無論如何,你必須以某種方式輸入你的數據。你通常會做的是使用一些簡單的解析格式,如CSV,XML等,並將其轉換爲表格。像這樣:

s=[[ 
1000 40 
100 30 
    0 20 
    50 25]] 
test ={ money={},age={}} 
n=1 
for balance,age in s:gmatch('([%d.]+)%s+([%d.]+)') do 
    test.money[n],test.age[n]=balance,age 
    n=n+1 
end 
0

你是說你不想寫「金錢」和「年齡」200x?

有幾種解決方案,但你可以寫這樣的:

local test0 = { 
    5, 32, 
    -5, 14, 
    ... 
} 

local test = {} 

for i=1,#test0/2 do 
    test[i] = {money = test0[2*i-1], age = test0[2*i]} 
end 

否則,你總是可以使用元表,並創建行爲完全像你想要的類。

相關問題