Forum: Ruby Array range.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ffc48400d1044e22209aa8fdacc2e053?d=identicon&s=25 Paul Tsung (ptsung)
on 2006-03-06 17:11
Hi,

I have a question about assigning the contents of a list of variables
with names like title1, title2, title3 up to title20 to an array.

Currently, this is the code that I use.

title1 = ruby
title2 = rails
title3 = typo
.
.
.
title20 = ajax

title_array = [title1, title2, title3, title4, title5, title6, title7,
title8, title9, title10, title11, title12, title13, title14, title15,
title16, title17, title18, title19, title20]

title_array.each do | i |
    do something...
end

Is there a shorter way to do this?  Instead of typing all the variable
names, can I use a range to do this?  Like title(1..20)?

Thanks for any help with this.
E34b5cae57e0dd170114dba444e37852?d=identicon&s=25 Logan Capaldo (Guest)
on 2006-03-06 17:23
(Received via mailing list)
On Mar 6, 2006, at 11:14 AM, Paul Tsung wrote:

> .
> end
>
> Is there a shorter way to do this?  Instead of typing all the variable
> names, can I use a range to do this?  Like title(1..20)?
>
> Thanks for any help with this.
>
>
> --
> Posted via http://www.ruby-forum.com/.
>

I am confused, why not title_array = [ ruby, rails, typo, ..., ajax ]

However if really want to do this,  (I really think this needs a
redesign though) you can do this:

title_array = []

(1..20).each do |i|
     title_array << eval("title#{i}")
end
05be5d6610e2c3f1780aa0e39e902e93?d=identicon&s=25 Farrel Lifson (Guest)
on 2006-03-06 17:30
(Received via mailing list)
> Is there a shorter way to do this?  Instead of typing all the variable
> names, can I use a range to do this?  Like title(1..20)?

You can use eval.

irb(main):106:0> title1="rails"
=> "rails"
irb(main):107:0> title2="ruby"
=> "ruby"
irb(main):108:0> title3="typo"
=> "typo"
irb(main):117:0> (1..3).each do |num|
irb(main):118:1*     eval "puts title#{num}"
irb(main):119:1> end
rails
ruby
typo

I'm not sure if there is a way to get a reference to an object if you
know it's symbol, but if there is that might be more elegant.

Farrel
5befe95e6648daec3dd5728cd36602d0?d=identicon&s=25 Robert Klemme (Guest)
on 2006-03-06 17:45
(Received via mailing list)
Paul Tsung wrote:
> Hi,
>
> I have a question about assigning the contents of a list of variables
> with names like title1, title2, title3 up to title20 to an array.
>
> Currently, this is the code that I use.
>
> title1 = ruby
> title2 = rails
> title3 = typo

Where exactly is the array in your example?  I'm a bit confused.  Do you
want this?

>> title = %w{ruby rails typo}
=> ["ruby", "rails", "typo"]

Kind regards

    robert
Ffc48400d1044e22209aa8fdacc2e053?d=identicon&s=25 Paul Tsung (ptsung)
on 2006-03-06 17:59
Logan Capaldo wrote:
> On Mar 6, 2006, at 11:14 AM, Paul Tsung wrote:
>
>> .
>> end
>>
>> Is there a shorter way to do this?  Instead of typing all the variable
>> names, can I use a range to do this?  Like title(1..20)?
>>
>> Thanks for any help with this.
>>
>>
>> --
>> Posted via http://www.ruby-forum.com/.
>>
>
> I am confused, why not title_array = [ ruby, rails, typo, ..., ajax ]
>
> However if really want to do this,  (I really think this needs a
> redesign though) you can do this:
>
> title_array = []
>
> (1..20).each do |i|
>      title_array << eval("title#{i}")
> end

Thank you for everyone's help with this.  The eval method is what I was
looking for.  The contents for the variables are actually inside a
database.  I just use title1 = ruby as an example.  Thanks again.
This topic is locked and can not be replied to.