我对lua很新,我的计划是创建一个表。这个表(我称之为测试)有200个条目 - 每个条目都有相同的子条目(在这个例子中,子条目金钱和年龄):
这是一种伪代码:
table test = {
Entry 1: money=5 age=32
Entry 2: money=-5 age=14
...
Entry 200: money=999 age=72
}
我怎么能用lua写这个?有可能吗?另一种方式是,我将每个子条目写成一个表:
table money = { }
table age = { }
但对我来说,这不是一个好方法,所以也许你可以帮助我。
编辑:
这个问题Table inside a table是相关的,但我不能写这个200x。
答案 0 :(得分: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"
答案 1 :(得分:0)
您也可以在问题的一侧解决问题,并在test
:money
和age
中有两个序列,其中每个条目在两个数组中都具有相同的索引。
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
答案 2 :(得分: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
否则你总是可以使用metatables并创建一个行为完全符合你想要的类。