[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

beginner's question about passing arrays as arguments to methods

gigaday@googlemail.com

11/13/2006 10:33:00 AM

I am doing a little script that builds an array (called darray) of all
filenames in a directory tree. I am doing this by recursively calling
a method (called enter_dir) and passing the partially filled array
(called darray) down through the recursive calls.

The code works, but I am concerned about the efficiency of passing what
is potentially quite a large array around so many times. Should I be
concerned about this or not?

I also wrote the code using a global array ($darray) and this worked
too and didn't need to array to be passed down through the recursions.

What are the pros and cons of these two approaches?


def enter_dir(this_dir, darray)
farray = []
this_dir.each {|fname|
farray << fname
}
farray.each {|fname|
file_path = this_dir.path + '/' + fname
if File.stat(file_path).directory?
this_dir_sub = Dir.new(file_path)
if fname != '.' && fname != '..'
enter_dir(this_dir_sub, darray)
end
else
darray << file_path
end
}
end

this_dir = Dir.new('/home/tony/Ruby/dot_recycle')
darray = []
enter_dir(this_dir, darray)
puts darray

3 Answers

Farrel Lifson

11/13/2006 10:43:00 AM

0

On 13/11/06, gigaday@googlemail.com <gigaday@googlemail.com> wrote:
> I am doing a little script that builds an array (called darray) of all
> filenames in a directory tree. I am doing this by recursively calling
> a method (called enter_dir) and passing the partially filled array
> (called darray) down through the recursive calls.
>
> The code works, but I am concerned about the efficiency of passing what
> is potentially quite a large array around so many times. Should I be
> concerned about this or not?
>
> I also wrote the code using a global array ($darray) and this worked
> too and didn't need to array to be passed down through the recursions.
>
> What are the pros and cons of these two approaches?
>
>
> def enter_dir(this_dir, darray)
> farray = []
> this_dir.each {|fname|
> farray << fname
> }
> farray.each {|fname|
> file_path = this_dir.path + '/' + fname
> if File.stat(file_path).directory?
> this_dir_sub = Dir.new(file_path)
> if fname != '.' && fname != '..'
> enter_dir(this_dir_sub, darray)
> end
> else
> darray << file_path
> end
> }
> end
>
> this_dir = Dir.new('/home/tony/Ruby/dot_recycle')
> darray = []
> enter_dir(this_dir, darray)
> puts darray

You're not actually passing the array around whenever you call
enter_dir, rather you're passing a reference to the object, so the
performance penalties should not be noticable at all.

Farrel

Harold Hausman

11/13/2006 2:55:00 PM

0

On 11/13/06, Gareth Adams <gareth.adams@gmail.com> wrote:
> Farrel Lifson <farrel.lifson <at> gmail.com> writes:
>
> >
> > You're not actually passing the array around whenever you call
> > enter_dir, rather you're passing a reference to the object, so the
> > performance penalties should not be noticable at all.
> >
> > Farrel
> >
> >
>
>
> Hopefully that makes sense, but if it doesn't, imagine tying a long piece of
> string to a large rock and then giving the other end of the string to someone to
> hold
>
>
>

Or there's always the Binky Pointer video:
http://cslibrary.stanfor...

-Harold

Ubiquitous

12/22/2011 12:57:00 AM

0

gmsingh@email.com wrote:
>On 12/21/11 5:07 PM, Ubiquitous wrote:

>> TROLL-O-METER
>>
>> 5* 6* *7
>> 4* *8
>> 3* *9
>> 2* *10
>> 1* | *stuporous
>> 0* -*- *catatonic
>> * |\ *comatose
>> * \ *clinical death
>> * \ *biological death
>> * _\/ *demonic apparition
>> * * *damned for all eternity
>
>
>QED.

Of course I am right; No further comment was needed on your part.


--
"If Barack Obama isn't careful, he will become the Jimmy Carter of the
21st century."