Adding to an array question

C

Corey Haines

I need to add a string to the end of an array count number of times. I
was wondering if I could get some advice on the prefered way to do it
in Ruby.

@bucket is the array


def add_person(count, name)
@bucket += Array.new(count, name)
end

or some other ideas

def add_person(count, name)
count.times {@bucket << name }
end
# or some variation of looping

Personally, I like the adding a new array to the @bucket array. I
realize (at least I assume) that it creates a temporary Array, but I
think it is more understandable?

Thoughts?
Thanks, I'm just learning Ruby
-Corey
 
S

Stefan Rusterholz

Corey said:
I need to add a string to the end of an array count number of times. I
was wondering if I could get some advice on the prefered way to do it
in Ruby.

@bucket is the array


def add_person(count, name)
@bucket += Array.new(count, name)
end

or some other ideas

def add_person(count, name)
count.times {@bucket << name }
end
# or some variation of looping

Personally, I like the adding a new array to the @bucket array. I
realize (at least I assume) that it creates a temporary Array, but I
think it is more understandable?

Thoughts?
Thanks, I'm just learning Ruby
-Corey

def add_person(name, count=1) # I assume adding once as a default is
rather safe
@bucket.concat(Array.new(count) { name.dup }) # a) this will create a
new string object everytime
@bucket.concat(Array.new(count, name) # b) this will use the *same*
string object everytime
end

Use either a) or b). Be aware that with b) if you do e.g.
@bucket.last.upcase!, it will reflect on all slots that contain the same
object.
As to why I prefer this concat solution over array +=: it doesn't create
throw away objects everytime.

Regards
Stefan
 
C

Corey Haines

Thanks for the tips, Stefan. I like your tip on doing .dup, as well.

Thanks again!

-Corey
 

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

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,175
Latest member
Vinay Kumar_ Nevatia
Top