pretty format arrays

S

Srijayanth Sridhar

[Note: parts of this message were removed to make it a legal post.]

Hello,

I am using OptionParser and one of the nifty things it has is multi line
descriptions for each option. I have a particularly long list of valid
arguments for a valid option, for instance cities=[London,Paris,NY......].
If printed in a single line it runs over and looks ugly. My hack so far is:

def pretty_print_list list,num=5
a=[]
(0...list.size).step(num) { |i| a << (list[i...i+num]).join(',') }
a
end

This returns a list of strings which I pass as *list to the OptionParser .on
method as follows:

arg.on("--city [CITY]",cities,*list) { |o| options.city=o }

The hack works fine, but on a broader subject, is there a nice easy way of
grouping arrays? In python Range accepts a step value which is quite
awesome...

Thanks,

Jayanth
 
R

Robert Klemme

2009/4/15 Srijayanth Sridhar said:
Hello,

I am using OptionParser and one of the nifty things it has is multi line
descriptions for each option. I have a particularly long list of valid
arguments for a valid option, for instance cities=3D[London,Paris,NY.....= ].
If printed in a single line it runs over and looks ugly. My hack so far i= s:

def pretty_print_list list,num=3D5
=A0 a=3D[]
=A0 (0...list.size).step(num) { |i| a << (list[i...i+num]).join(',') }
=A0 a
end

This returns a list of strings which I pass as *list to the OptionParser = on
method as follows:

arg.on("--city [CITY]",cities,*list) { |o| options.city=3Do }

The hack works fine, but on a broader subject, is there a nice easy way o= f
grouping arrays? In python Range accepts a step value which is quite
awesome...

#each_slice does the job:

irb(main):008:0> a =3D (1..10).to_a
=3D> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):009:0> a.each_slice(3).to_a
=3D> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

Cheers

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
 
L

Lyle Johnson

The hack works fine, but on a broader subject, is there a nice easy way of
grouping arrays?

You could use Enumerator#each_slice:

require 'enumerator'

def pretty_print_list(list, num=5)
a = []
list.each_slice(5) {|s| a << s.join(",") }
a
end

Hope this helps,

Lyle
 

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
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top