Reputation: 1073
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
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
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