Cleaner way to do this?

That's what I initially suggested :-).

However, he felt it was a bit crazy to do the test every time, given the
large size of the array.

H.

···

-----Original Message-----
From: Wayne Vucenic [mailto:nightphotos@gmail.com]
Sent: Friday, 5 November 2004 12:12
To: ruby-talk ML
Subject: Re: Cleaner way to do this?

How about

[1, 2, 3, 4, 5].each_with_index do |x, i|
   if i == 0
     print x
   else
     print ", ",x
   end
end

************************************************************************

If you have received this e-mail in error, please delete it and notify the sender as soon as possible. The contents of this e-mail may be confidential and the unauthorized use, copying, or dissemination of it and any attachments to it, is prohibited.

Internet communications are not secure and Hyperion does not, therefore, accept legal responsibility for the contents of this message nor for any damage caused by viruses. The views expressed here do not necessarily represent those of Hyperion.

For more information about Hyperion, please visit our Web site at www.hyperion.com

Harry Ohlsen wrote:

From: Wayne Vucenic [mailto:nightphotos@gmail.com] Sent: Friday, 5 November 2004 12:12
To: ruby-talk ML
Subject: Re: Cleaner way to do this?

How about

[1, 2, 3, 4, 5].each_with_index do |x, i|
  if i == 0
    print x
  else
    print ", ",x
  end
end
   
That's what I initially suggested :-).

However, he felt it was a bit crazy to do the test every time, given the
large size of the array.

H.

If your friend knows the processing he wants to do on the first element, why not just keep it simple...

arr = [1,2,3,4,5]
process = proc{ |e| print e }.call( arr[0] )
arr[1...arr.length].each do |e|
    print ", #{e}"
end

Zach

···

-----Original Message-----

Harry Ohlsen wrote:

···

-----Original Message-----
From: Wayne Vucenic [mailto:nightphotos@gmail.com]
Sent: Friday, 5 November 2004 12:12
To: ruby-talk ML
Subject: Re: Cleaner way to do this?

How about

[1, 2, 3, 4, 5].each_with_index do |x, i|
   if i == 0
     print x
   else
     print ", ",x
   end
end

That's what I initially suggested :-).

However, he felt it was a bit crazy to do the test every time, given the
large size of the array.

how about this?

arr = [1, 2, 3, 4, 5]
first = arr.shift
print arr.inject(first) { | c, i | "#{c.to_s}, #{i.to_s}" }

benny

Zach Dennis wrote:

If your friend knows the processing he wants to do on the first element, why not just keep it simple...

arr = [1,2,3,4,5]
process = proc{ |e| print e }.call( arr[0] )
arr[1...arr.length].each do |e|
   print ", #{e}"
end

This is also faster, then doing a comparison in each iteration :

RESULTS:

---------- Capture Output ----------
"C:\ruby\bin\ruby.exe" -d harry_ohlsen.rb
WRITING 1
Took:
19.297000169754
seconds
WRITING 2
Took: 11.7650001049042 seconds
Terminated with exit code 0

--------CODE-----------
require 'time'

arr =
2000000.times do |i|
    arr << "abcdefghijklmnopqrstuvwxyz"
end

f = File.new( "temp.txt" , "w+" )
t = Time.new
arr.each_with_index do |x,i|
    if i==0
        f.print x
    else
        f.print ', ',x
    end end
f.close
puts "WRITING 1"
puts "Took: ", (Time.new.to_f - t.to_f).to_s, " seconds"

f = File.new( "temp.txt2" , "w+" )
t = Time.new
process = proc { |e| f.print e }.call( arr[0] )
arr[1...arr.length].each do |e|
    f.print ', ',e
end
f.close
puts "WRITING 2"
print "Took: ", (Time.new.to_f- t.to_f).to_s, " seconds"

benny wrote:

Harry Ohlsen wrote:

From: Wayne Vucenic [mailto:nightphotos@gmail.com]
Sent: Friday, 5 November 2004 12:12
To: ruby-talk ML
Subject: Re: Cleaner way to do this?

How about

[1, 2, 3, 4, 5].each_with_index do |x, i|
   if i == 0
     print x
   else
     print ", ",x
   end
end

That's what I initially suggested :-).

However, he felt it was a bit crazy to do the test every time, given the
large size of the array.

how about this?

arr = [1, 2, 3, 4, 5]
first = arr.shift
print arr.inject(first) { | c, i | "#{c.to_s}, #{i.to_s}" }

benny

or even

print [1, 2, 3, 4, 5].join(' ,')

benny

···

-----Original Message-----

benny wrote:

arr = [1, 2, 3, 4, 5]
first = arr.shift
print arr.inject(first) { | c, i | "#{c.to_s}, #{i.to_s}" }

benny

now I saw the initial post :slight_smile:
sorry for the noise

benny

Hi --

···

On Fri, 5 Nov 2004, benny wrote:

or even

print [1, 2, 3, 4, 5].join(' ,')

See the very first post in this thread :slight_smile:

David

--
David A. Black
dblack@wobblini.net