Array range


#1

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.


#2

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


#3

On Mar 6, 2006, at 11:14 AM, Paul T. 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


#4

Paul T. 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

#5

Logan C. wrote:

On Mar 6, 2006, at 11:14 AM, Paul T. 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.