Array range.

P

Paul Tsung

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
 
L

Logan Capaldo

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.

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
 
F

Farrel Lifson

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=3D"rails"
=3D> "rails"
irb(main):107:0> title2=3D"ruby"
=3D> "ruby"
irb(main):108:0> title3=3D"typo"
=3D> "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
 
R

Robert Klemme

Paul said:
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?
=> ["ruby", "rails", "typo"]

Kind regards

robert
 
P

Paul Tsung

Logan said:
.
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.

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,202
Messages
2,571,057
Members
47,666
Latest member
selsetu

Latest Threads

Top