[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

How to the output in 12x8 format

Li Chen

10/19/2006 9:36:00 PM

Hi folks,

I have an array containing 96 elements. I want to print the array in
12x8 format. Any comments?

Thanks in advance,

Li

--
Posted via http://www.ruby-....

6 Answers

Tim Pease

10/19/2006 9:45:00 PM

0

On 10/19/06, Li Chen <chen_li3@yahoo.com> wrote:
> Hi folks,
>
> I have an array containing 96 elements. I want to print the array in
> 12x8 format. Any comments?
>
> Thanks in advance,
>
> Li

require 'enumerator'

ary = (1..96).to_a
ary.each_slice(8) {|slice| puts slice.inspect}

[1, 2, 3, 4, 5, 6, 7, 8]
[9, 10, 11, 12, 13, 14, 15, 16]
[17, 18, 19, 20, 21, 22, 23, 24]
[25, 26, 27, 28, 29, 30, 31, 32]
[33, 34, 35, 36, 37, 38, 39, 40]
[41, 42, 43, 44, 45, 46, 47, 48]
[49, 50, 51, 52, 53, 54, 55, 56]
[57, 58, 59, 60, 61, 62, 63, 64]
[65, 66, 67, 68, 69, 70, 71, 72]
[73, 74, 75, 76, 77, 78, 79, 80]
[81, 82, 83, 84, 85, 86, 87, 88]
[89, 90, 91, 92, 93, 94, 95, 96]


Blessings,
TwP

Josef 'Jupp' Schugt

10/19/2006 10:07:00 PM

0

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Li Chen wrote:
| I have an array containing 96 elements. I want to print the array
| in 12x8 format. Any comments?

Old school way (Beware! Ternary operator ahead!):

a = (1..96).to_a.reverse
a.each_with_index{|x,i|print x,i%12==11?"\n":"\t"}

Idea:

Iterate x over all elements of a
print x
is it value number eleven (the twelveth) in the row?
. if so break line
. if not jump to next tabulator
condition ends
iteration ends

Jupp
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFN/b0rhv7B2zGV08RAnGUAJ0YcmrBhwZzORu0zxzZ7ObuxV1YpwCg4GAk
dc6aobYd2tKBxQzJ8Wq4Fpk=
=k96z
-----END PGP SIGNATURE-----

Li Chen

10/19/2006 10:19:00 PM

0


>
> require 'enumerator'
>
> ary = (1..96).to_a
> ary.each_slice(8) {|slice| puts slice.inspect}
>
> [1, 2, 3, 4, 5, 6, 7, 8]
>.......

> [89, 90, 91, 92, 93, 94, 95, 96]


Hi,

Why should I write the code :require 'enumerator'?

Is enumerator a module or class?


Thanks,

Li

--
Posted via http://www.ruby-....

Tim Pease

10/19/2006 10:37:00 PM

0

On 10/19/06, Li Chen <chen_li3@yahoo.com> wrote:
>
> >
> > require 'enumerator'
> >
> > ary = (1..96).to_a
> > ary.each_slice(8) {|slice| puts slice.inspect}
> >
> > [1, 2, 3, 4, 5, 6, 7, 8]
> >.......
>
> > [89, 90, 91, 92, 93, 94, 95, 96]
>
>
> Hi,
>
> Why should I write the code :require 'enumerator'?
>
> Is enumerator a module or class?
>

The 'each_slice' method is defined in the Enumerable module, but
portions this module are not included by default. Requiring
enumerator adds some extra methods to the Enumerable objects --
each_slice being one of those methods.

Take a look at the Pragmatic book for some more info. It's on page
672 of the real book. I could not find any reference to each_slice in
the online version.

The rdoc documents aren't too helpful with this one. They just list
all the Enumerable methods. It gives the impression that all of them
are right there in the Array class (which is not the case).

I'm done rambling now. Going home to see the little kiddo and wife :)

Blessings,
TwP

Rubén Medellín

10/20/2006 2:00:00 PM

0



On Oct 19, 4:35 pm, Li Chen <chen_...@yahoo.com> wrote:
> Hi folks,
>
> I have an array containing 96 elements. I want to print the array in
> 12x8 format. Any comments?
>
> Thanks in advance,
>
> Li
>

Hi.

The slicing method is neat.
However, not having the book, this is what i came upon, supposing you'd
want to keep the string and not only to print it.

class Array
def print_format(width)
str = ''
from_index = 0
while !self[from_index].nil?
str << self[from_index, width].inspect + "\n"
from_index += width
end
str
end
end

n = (1..96).to_a
puts n.print_format(8)

Conclusion: I want my book!
Regards.

Rick DeNatale

10/20/2006 4:13:00 PM

0

On 10/19/06, Tim Pease <tim.pease@gmail.com> wrote:
> On 10/19/06, Li Chen <chen_li3@yahoo.com> wrote:
> > Hi folks,
> >
> > I have an array containing 96 elements. I want to print the array in
> > 12x8 format. Any comments?
> >
> > Thanks in advance,
> >
> > Li
>
> require 'enumerator'
>
> ary = (1..96).to_a
> ary.each_slice(8) {|slice| puts slice.inspect}
>
> [1, 2, 3, 4, 5, 6, 7, 8]
> [9, 10, 11, 12, 13, 14, 15, 16]
> [17, 18, 19, 20, 21, 22, 23, 24]
> [25, 26, 27, 28, 29, 30, 31, 32]
> [33, 34, 35, 36, 37, 38, 39, 40]
> [41, 42, 43, 44, 45, 46, 47, 48]
> [49, 50, 51, 52, 53, 54, 55, 56]
> [57, 58, 59, 60, 61, 62, 63, 64]
> [65, 66, 67, 68, 69, 70, 71, 72]
> [73, 74, 75, 76, 77, 78, 79, 80]
> [81, 82, 83, 84, 85, 86, 87, 88]
> [89, 90, 91, 92, 93, 94, 95, 96]

Or as an alternative:

ary = (1..8).to_a
(0..7).each {|i| p ary[i*8, 8] }

One advantage of Tim's suggestion of using each_slice is that the data
doesn't really need to be an array, it can be another class which
mixes in Enumerable.

require 'enumerator'
not_really_array = (1..96)
not_really_array.each_slice(8) { |slice| p slice }

[1, 2, 3, 4, 5, 6, 7, 8]
[9, 10, 11, 12, 13, 14, 15, 16]
[17, 18, 19, 20, 21, 22, 23, 24]
[25, 26, 27, 28, 29, 30, 31, 32]
[33, 34, 35, 36, 37, 38, 39, 40]
[41, 42, 43, 44, 45, 46, 47, 48]
[49, 50, 51, 52, 53, 54, 55, 56]
[57, 58, 59, 60, 61, 62, 63, 64]
[65, 66, 67, 68, 69, 70, 71, 72]
[73, 74, 75, 76, 77, 78, 79, 80]
[81, 82, 83, 84, 85, 86, 87, 88]
[89, 90, 91, 92, 93, 94, 95, 96]

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...