• Subject: Re: Newbie: ipairs() for tables with non integer keys
• From: "Ivan Smirnov" <i.s.smirnov@...>
• Date: Fri, 8 Dec 2006 00:02:30 -0700

Welcome.

Right, 'i' stands for integer.

On 12/7/06, Ganesh Gunasegaran <ganesh.gunasegaran@gmail.com > wrote:
My question was silly, isn't it?

The 'i' in ipairs stands for integer right?

Thanks Ivan, the following works

student = {}
student.name = "Test"
student.age = 25

for i,v in pairs(student) do
print(i,"=>",v)
end

test_arr = {4,5,6}
for i,v in pairs(test_arr) do
print(i,"=>",v)
end

#############################
---------- Run ----------
name    =>    Test
age    =>    25
1    =>    4
2    =>    5
3    =>    6

Output completed (0 sec consumed) - Normal Termination

Cheers,
GG

On 12/8/06, Ivan Smirnov <i.s.smirnov@gmail.com > wrote:
Hello,

Iterator ipairs() goes over plain integer keys arrays - moreover, you won't like to use it for arrays with nil-gaps or any other anomalies.

As for your example, pairs() will work for both student and test_arr; ipairs() will work for test_arr. AFAIK, pairs() won't provide an ordered lookup for plain integer arrays.

On 12/7/06, Ganesh Gunasegaran < ganesh.gunasegaran@gmail.com> wrote:
Hi,

Does ipairs() work only with integer keys? if so why?

student = {}
student.name = "Test"
student.age = 25

for i,v in ipairs(student) do -- A
print(i,"=>",v)
end

test_arr = {4,5,6}
for i,v in ipairs(test_arr) do -- B
print(i,"=>",v)
end

#########################
---------- Run ----------
1    =>    4
2    =>    5
3    =>    6

Output completed (0 sec consumed) - Normal Termination

I expected that the for loop at A to print something like
"name"  =>    "Test"
"age"    =>    25

Cheers,
GG

--
Regards,
Ivan Smirnov

Department of Math and Stat Sciences
622 CAB
University of Alberta
T6G 2G1

ismirnov@math.ualberta.ca, i.s.smirnov@gmail.com

--
Regards,
Ivan Smirnov

Department of Math and Stat Sciences
622 CAB
University of Alberta