Массивы Ruby с просто / rjust / центром

#ruby #arrays

#ruby #массивы

Вопрос:

Я создал следующий код как часть упражнения в руководстве по Ruby, которое я пытаюсь:

 title = ['Chapter 1: Numbers','Chapter 2: Letters','Chapter 3: Variables']
pages = ['Page 1','page 72','page 118']

linewidth = 40
header = '*Table of Contents*'

puts header.center linewidth
puts
puts ((title[0]).ljust linewidth/2)   ((pages[0]).rjust linewidth/2)
puts ((title[1]).ljust linewidth/2)   ((pages[1]).rjust linewidth/2)
puts ((title[2]).ljust linewidth/2)   ((pages[2]).rjust linewidth/2)
  

Мой вопрос в том, можно ли вышесказанное выполнить, не уточняя, какую часть массива отображать? т. Е. могу ли я просто одним битом кода заставить его перечислять все заголовки и все страницы в массиве по порядку? Если да, то как это можно было бы сделать?

Ответ №1:

Вы можете вывести список следующим образом:

 titles.each_with_index do |title,index|
  puts title.ljust(linewidth/2)   (b[index] ? b[index].rjust(linewidth/2) : nil)
end
  

Ответ №2:

Как насчет:

 >> title = ['Chapter 1: Numbers','Chapter 2: Letters','Chapter 3: Variables'] 
#=> ["Chapter 1: Numbers", "Chapter 2: Letters", "Chapter 3: Variables"]
>> pages = ['Page 1','page 72','page 118'] 
#=> ["Page 1", "page 72", "page 118"]
>> 
..   linewidth = 40 #=> 40
>> header = '*Table of Contents*' 
#=> "*Table of Contents*"
>> center = linewidth / 2 
#=> 20
>> puts header.center linewidth #=> nil
          *Table of Contents*           
>> puts 
#=> nil
>> title.zip(pages) do |t, p|
..     puts "#{t.ljust(center)} #{p.ljust(center)}"
..   end 
Chapter 1: Numbers   Page 1              
Chapter 2: Letters   page 72             
Chapter 3: Variables page 118 
#=> nil           
  

Ответ №3:

titles и pages являются параллельными массивами. Array.zip отлично справляется с параллельными массивами:

 title.zip(pages).each do |title, pages|
  puts (title.ljust linewidth / 2)   (pages.rjust linewidth / 2)
end
  

Комментарии:

1. Ах, большое спасибо. Параллельные массивы и ‘.zip’ — это не то, что до сих пор рассматривалось в моем руководстве, но выглядит как гораздо лучшее решение.