hfranco
hfranco

Reputation: 1073

Printing multiple arrays in one line

I'm trying to print several arrays on one line. The first line is ok but the loop breaks down after that. I've tried going over it serveral times but no cigar. Here's the code:

chapter_num = ['Chapter 1', 'Chapter 2', 'Chapter 3']
chapter_title = ['Numbers', 'Letters', 'Variables']
chapter_page = ['page 1', 'page 72', 'page 118']

#Prints chapter number
chapter_num.each do |num|
    print (num.ljust 0)

    #Prints title
    chapter_title.each do |title|
            print (title.center 14)

            #Prints page number
            chapter_page.each do |page|
                    puts (page.rjust 40)
            end
    end
end

When I run the above code it looks like this:

Chapter 1   Numbers                                      page 1
                             page 72
                            page 118
   Letters                                      page 1
                             page 72
                            page 118
  Variables                                     page 1
                             page 72
                            page 118
Chapter 2   Numbers                                      page 1
                             page 72
                            page 118
   Letters                                      page 1
                             page 72
                            page 118
  Variables                                     page 1
                             page 72
                            page 118
Chapter 3   Numbers                                      page 1
                             page 72
                            page 118
  Letters                                      page 1
                             page 72
                            page 118
Variables                                     page 1
                             page 72
                            page 118

It's suppose to look like this:

Chapter 1   Numbers                                      page 1
Chapter 2   Letters                                     page 72
Chapter 3  Variables                                   page 118

Upvotes: 0

Views: 425

Answers (2)

orde
orde

Reputation: 5273

You could use the Array::zip method here:

chapter_num = ['Chapter 1', 'Chapter 2', 'Chapter 3']
chapter_title = ['Numbers', 'Letters', 'Variables']
chapter_page = ['page 1', 'page 72', 'page 118']

arr = chapter_num.zip(chapter_title, chapter_page)
arr.each { |el| puts "#{el[0].ljust 0} #{el[1].center 14} #{el[2].rjust 40}" }

#=> Chapter 1    Numbers                                       page 1
#=> Chapter 2    Letters                                      page 72
#=> Chapter 3   Variables                                    page 118

And--since Array::zip takes an optional block--you could do it in one line:

chapter_num.zip(chapter_title, chapter_page).each { |el| puts "#{el[0].ljust 0} #{el[1].center 14} #{el[2].rjust 40}" }

Upvotes: 2

koukouviou
koukouviou

Reputation: 820

In your code you have three nested loops which is the reason for getting the output you are getting. You only need to have one loop for printing the i-th element of each of your arrays like this:

chapter_num = ['Chapter 1', 'Chapter 2', 'Chapter 3']
chapter_title = ['Numbers', 'Letters', 'Variables']
chapter_page = ['page 1', 'page 72', 'page 118']

#Prints chapter number
(0..chapter_num.length-1).each do |i|
  puts "#{chapter_num[i].ljust 0} #{chapter_title[i].center 14} #{chapter_page[i].rjust 40}"
end

which prints out:

Chapter 1    Numbers                                       page 1
Chapter 2    Letters                                      page 72
Chapter 3   Variables                                    page 118

Upvotes: 1

Related Questions