我有目录的数据:
array = [
['Chapter 1', 'Numbers', 1],
['Chapter 2', 'Letters', 72],
['Chapter 3', 'Variables', 118]
]
我试图将数组的内容显示为这样的表:
Chapter 1 Numbers 1
Chapter 2 Letters 72
Chapter 3 Variables 118
这是我的代码:
lineWidth = 80
col1Width = lineWidth/4
col2Width = lineWidth/2
col3Width = lineWidth/4
array.each do |i|
puts i[0].to_s.ljust(col1Width) + puts i[1].to_s.ljust(col2Width) + puts i[2].to_s.ljust(col3Width)
end
问题是我一直收到这个错误:
chapter7-arrays.rb:48: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
puts i[0] + puts i[1] + puts i[2]
^
chapter7-arrays.rb:48: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
puts i[0] + puts i[1] + puts i[2]
所有帮助表示赞赏。
答案 0 :(得分:2)
您的代码几乎是正确的。问题是您正在连接多个puts
调用,而您应该连接String
个参数,并使用单个puts
调用。
array = [['Chapter 1', 'Numbers', 1],['Chapter 2', 'Letters', 72],['Chapter 3', 'Variables', 118]]
lineWidth = 80
col1Width = lineWidth/4
col2Width = lineWidth/2
col3Width = lineWidth/4
array.each do |i|
puts i[0].to_s.ljust(col1Width) +
i[1].to_s.ljust(col2Width) +
i[2].to_s.ljust(col3Width)
end
答案 1 :(得分:1)
我已根据 dgilperez
的要求添加了解释我们有一个子阵列数组,每个子阵列有三个元素。 我们为子数组中的每个项目提供了三种不同的格式值。 将格式值存储在数组中也很方便。
lines = [lineWidth/4, lineWidth/2, lineWidth/4]
现在我们需要管理每个子数组的循环
array.each do |i|
i.map
end
...我们需要当前元素的索引来获取相应的格式化值。
array.each do |i|
i.map.with_index
end
现在我们实现一个为子项 z 的每个项执行的块
i.map.with_index{|z, index| z.to_s.ljust(lines[index])}
... 索引的范围为[0,1,2]。 因此,对于第一项,我们将使用第一个格式值等
index == 0,lines [index] == lineWidth / 4
index == 1,lines [index] == lineWidth / 2
这个块返回一个字符串数组,因为我们通过函数 map 组织了一个循环。检查地图方法文档here
现在我们需要使用方法 join
将所有字符串连接成一个字符串i.map.with_index{|z, index| z.to_s.ljust(lines[index])}.join
返回最后一个字符串 - 在块
之前添加方法 putsputs i.map.with_index{|z, index| z.to_s.ljust(lines[index])}.join
这是最终代码
array = [['Chapter 1', 'Numbers', 1],['Chapter 2', 'Letters', 72],['Chapter 3', 'Variables', 118]]
lineWidth = 80
lines = [lineWidth/4, lineWidth/2, lineWidth/4]
array.each do |i|
puts i.map.with_index{|z, index| z.to_s.ljust(lines[index])}.join
end