Question

I am very new to lua and my plan is to create a table. This table (I call it test) has 200 entries - each entry has the same subentries (In this example the subentries money and age):

This is a sort of pseudocode:

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

How can I write this in lua ? Is there a possibility ? The other way would be, that I write each subentry as a single table:

table money = { }
table age = { }

But for me, this isn't a nice way, so maybe you can help me.

Edit:

This question Table inside a table is related, but I cannot write this 200x.

Was it helpful?

Solution

Try this syntax:

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

Examples of use:

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

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

OTHER TIPS

You can also turn the problem on it's side, and have 2 sequences in test: money and age where each entry has the same index in both arrays.

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

This will have better performance since you only have the overhead of 3 tables instead of n+1 tables, where n is the number of entries.

Anyway you have to enter your data one way or another. What you'd typically do is make use some easily parsed format like CSV, XML, ... and convert that to a table. Like this:

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 

You mean you do not want to write "money" and "age" 200x?

There are several solutions but you could write something like:

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

Otherwise you could always use metatables and create a class that behaves exactly like you want.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top