## Getting value from table problem

General discussion about LÖVE, Lua, game development, puns, and unicorns.
PGUp
Party member
Posts: 105
Joined: Fri Apr 21, 2017 9:17 am

### Getting value from table problem

so, i want to get a value from a table, its hard to explain, this is the code :

a = 10
enemystuff = {}
enemy = {}
enemy.y = 100
table.insert(enemystuff, enemy)
end

function love.update(dt)
if a > enemy.y then
(print something here)
end
end

so, i dont know how to get the enemy.y, using for loop make no sense, and it wont work.. so i have no idea at all how to do this, help ?
-

yetneverdone
Party member
Posts: 358
Joined: Sat Sep 24, 2016 11:20 am
Contact:

### Re: Getting value from table problem

it should be enemystuff.enemy.y

MasterLee
Party member
Posts: 141
Joined: Tue Mar 07, 2017 4:03 pm
Contact:

### Re: Getting value from table problem

yetneverdone wrote:
Mon Apr 24, 2017 2:03 pm
it should be enemystuff.enemy.y
For me it looks like it should be

Code: Select all

enemystuff[1].y
but there changes are high that the enemystuff is supposed to be inside enemy and not the other way round as it is at the moment

yetneverdone
Party member
Posts: 358
Joined: Sat Sep 24, 2016 11:20 am
Contact:

### Re: Getting value from table problem

Code: Select all

enemystuff[1].y
That also works, because in actuality it translates to

Code: Select all

enemystuff[enemy].y

well, the "enemy" table is inside the "enemystuff" because you inserted that way.

Code: Select all

table.insert(
--table to insert to,
--value to inser,
)

So you should try table.insert(enemy,enemystuff)

zorg
Party member
Posts: 2909
Joined: Thu Dec 13, 2012 2:55 pm
Location: Absurdistan, Hungary
Contact:

### Re: Getting value from table problem

table.insert inserts things into the array part of a table, or in other words, enemystuff.enemy is nil, because enemy is not the key, it's the value, and enemystuff[1].y is the only correct way it will work.
Me and my stuff True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.

arampl
Party member
Posts: 248
Joined: Mon Oct 20, 2014 3:26 pm

### Re: Getting value from table problem

I think this issue is not about tables. Your "enemy" table is global AND is also child of table "enemystuff". So enemy.y is correct expression.
But you asking if a > enemy.y i.e. if 10 > 100 which is obviously is never true.

Sir_Silver
Party member
Posts: 286
Joined: Mon Aug 22, 2016 2:25 pm

### Re: Getting value from table problem

yetneverdone wrote:
Mon Apr 24, 2017 3:09 pm

Code: Select all

enemystuff[1].y
That also works, because in actuality it translates to

Code: Select all

enemystuff[enemy].y

No.

yetneverdone
Party member
Posts: 358
Joined: Sat Sep 24, 2016 11:20 am
Contact:

### Re: Getting value from table problem

Sir_Silver wrote:
Mon Apr 24, 2017 5:24 pm
yetneverdone wrote:
Mon Apr 24, 2017 3:09 pm

Code: Select all

enemystuff[1].y
That also works, because in actuality it translates to

Code: Select all

enemystuff[enemy].y

No.

Okay i understand. Sorry for my mistakes.

Sir_Silver
Party member
Posts: 286
Joined: Mon Aug 22, 2016 2:25 pm

### Re: Getting value from table problem

To elaborate, table.insert does not work the way you were mentioning before.

table.insert can take either two arguments- a table and a value to insert - or three arguments- a table, the numerical index to insert into, and the value to insert. When calling table.insert with only two arguments, it is functionally the same as calling table.insert with three arguments where the second argument is automatically the same as the length of the first table argument plus one.

This code:

Code: Select all

local enemystuff = {1, 2, 3, 4}
local enemy = {}

table.insert(enemystuff, enemy)

for k, v in pairs(enemystuff) do
print(k, v)
end

output ->
1	1
2	2
3	3
4	4
5	table: 0x2838b00
is functionally the same as this code:

Code: Select all

local enemystuff = {1, 2, 3, 4}
local enemy = {}

table.insert(enemystuff, #enemystuff + 1, enemy)

for k, v in pairs(enemystuff) do
print(k, v)
end

output->
1	1
2	2
3	3
4	4
5	table: 0x2838eb0
You cannot use table.insert to place a value into a table at any index that isn't a number, therefore after calling table.insert and inserting the enemy table into the enemystuff table, you will find that indexing the enemystuff table with the enemy will return nil.

Code: Select all

print(enemystuff[enemy])

output->
nil
tl:dr

This

Code: Select all

enemystuff[1].y
is not the same as this:

Code: Select all

enemystuff[enemy].y

Sir_Silver
Party member
Posts: 286
Joined: Mon Aug 22, 2016 2:25 pm

### Re: Getting value from table problem

To the OP, I don't really understand your question, do you mind clarifying?

To yetnevedone, table.insert does not work the way you were mentioning before.

table.insert can take either two arguments- a table and a value to insert - or three arguments- a table, the numerical index to insert into, and the value to insert. When calling table.insert with only two arguments, it is functionally the same as calling table.insert with three arguments where the second argument is automatically the same as the length of the first table argument plus one.

This code:

Code: Select all

local enemystuff = {1, 2, 3, 4}
local enemy = {}

table.insert(enemystuff, enemy)

for k, v in pairs(enemystuff) do
print(k, v)
end

output ->
1	1
2	2
3	3
4	4
5	table: 0x2838b00
is functionally the same as this code:

Code: Select all

local enemystuff = {1, 2, 3, 4}
local enemy = {}

table.insert(enemystuff, #enemystuff + 1, enemy)

for k, v in pairs(enemystuff) do
print(k, v)
end

output->
1	1
2	2
3	3
4	4
5	table: 0x2838eb0
You cannot use table.insert to place a value into a table at any index that isn't a number, therefore after calling table.insert and inserting the enemy table into the enemystuff table, you will find that indexing the enemystuff table with the enemy will return nil.

Code: Select all

print(enemystuff[enemy])

output->
nil
tl:dr

This

Code: Select all

enemystuff[1].y
does not translate to this:

Code: Select all

enemystuff[enemy].y

### Who is online

Users browsing this forum: No registered users and 20 guests