[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [Possibly Spam] Re: Size of a non numerical indexed table
- From: Rici Lake <lua@...>
- Date: Thu, 1 Sep 2005 10:23:24 -0500
It sounds to me like what you are trying to do is retain the order of
key insertion.
The technique I usually use (for tables with string keys) is to insert
the keys into the table as well:
local mytable = {}
for i = 1, mytable.n do
local name, info = readInfo(i) -- Note 1
mytable[i], mytable[name] = name, info
end
This assumes that all the names will be unique, which is not always the
case. (It would be easy to check, though)
Then you can access by name: mytable[key]
or by index: mytable[mytable[i]]
You can loop over all the keys in numeric order:
for i, key in ipairs(mytable) do
local val = mytable[key]
...
end
(You could write a custom iterator to do that, if you prefer)
If the keys are repeated (which is common in parsing internet
protocols) you need something more subtle, but it can be done.
Note 1:
local name, info
name, info = readInfo(i)
compiles into (in effect):
local name, info = nil, nil
local tmp1, tmp2 = readInfo(i)
name = tmp1
info = tmp2
So:
local name, info = readInfo(i) is a bit faster
On 1-Sep-05, at 6:52 AM, Jose Marin wrote:
The solution I've found is to have a 'n' field on the
table, and update it when I insert a new entry on the
table:
local mytable = { n = 0 }
for i = 1, readInfoCount()
local name, info
name, info = readInfo(i)
mytable[name] = info
mytable.n = mytable.n + 1
end
print(mytable.n)
Will print the number of members of the table,
alright, but the problem is if I have a field named
like "n"...
I could use _n, tableSize or other name to keep the
table size, but I wonder if there is one clever way of
do this...
Anyway, thank you all for the tips!
Another question is if it's possible to get a table
field using an index, on a non numerical indexed
table.
Yes, I could use foreachi ... but there is a direct
way of do this?
__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger
http://br.download.yahoo.com/messenger/