How to create multiple different arrays using a loop

Hi list,

I need to create a different array each time that I am going through a
loop.
I wonder how I can assign different names to the arrays based on the
iteration count.
For example first time that I go through the loop I want to create an
array named: a1, second one, a2 and so on.
Thanks a lot for your help.

On Aug 20, 2006, at 12:26 AM, Andy B. wrote:

Hi list,

I need to create a different array each time that I am going through a
loop.
I wonder how I can assign different names to the arrays based on the
iteration count.
For example first time that I go through the loop I want to create an
array named: a1, second one, a2 and so on.
Thanks a lot for your help.

By far the easiest way to do this is to stick them in a hash:

hash = {}
10.times do |count|
hash[“a” + count.to_s] = […]
end

This is, um, very similar to an array, except with “a” as the
subscript instead of .

If you absolutely must have a variable, then AFAIK you have to use an
instance variable:

10.times do |count|
instance_variable_set("@a#{count}", […])
end

There might be a way to create a local variable, but even if you did
it would go out of scope as soon as the block ended, so it would be
pretty useless.

Luke K. [email protected] wrote:

Thanks a lot for your help.

By far the easiest way to do this is to stick them in a hash:

I’d say Jeffrey’s approach (i.e. stick those arrays into an array) is by
far
the easiest and hassle free approach. Your approach has the
disadvantage
that it will loose creation order because alphanumeric sorting of names
like
“a1”, “a2” etc. will only work until “a9”.

Kind regards

robert

On Aug 20, 2006, at 10:25 AM, Robert K. wrote:

Luke K. [email protected] wrote:

By far the easiest way to do this is to stick them in a hash:

I’d say Jeffrey’s approach (i.e. stick those arrays into an array)
is by far
the easiest and hassle free approach. Your approach has the
disadvantage
that it will loose creation order because alphanumeric sorting of
names like
“a1”, “a2” etc. will only work until “a9”.

Sure; if you need to be able to sort based on name, use an array, I
suppose. OP implied naming was more important than ordering, which
usually means a hash, but either is sufficient, clearly.

Luke K. wrote:

On Aug 20, 2006, at 10:25 AM, Robert K. wrote:

Luke K. [email protected] wrote:

By far the easiest way to do this is to stick them in a hash:

I’d say Jeffrey’s approach (i.e. stick those arrays into an array)
is by far
the easiest and hassle free approach. Your approach has the
disadvantage
that it will loose creation order because alphanumeric sorting of
names like
“a1”, “a2” etc. will only work until “a9”.

Sure; if you need to be able to sort based on name, use an array, I
suppose. OP implied naming was more important than ordering, which
usually means a hash, but either is sufficient, clearly.

Thanks to all of you…I used your suggestions and my code is working
fine