两个索引,在lua表中有一个值

时间:2012-10-02 11:25:56

标签: multidimensional-array lua indexing lua-table

我对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。

3 个答案:

答案 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)

您也可以在问题的一侧解决问题,并在testmoneyage中有两个序列,其中每个条目在两个数组中都具有相同的索引。

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并创建一个行为完全符合你想要的类。