Ruby 以块形式打印具有相同索引的数组的元素

Ruby 以块形式打印具有相同索引的数组的元素,ruby,arrays,loops,indexing,block,Ruby,Arrays,Loops,Indexing,Block,具有如下数组的数组 x = [ ["a","b","c","2"], ["d","e","f",""], ["g","h","i","j"] ] 我试图打印每个数组的第n个元素,这些元素按块分组,如下所示: Begin - Value a - - Value d - - Value g - End Begin - Value b - - Value e - - Value h - End Begin - Value c - - Value f - - Value i - End Begin -

具有如下数组的数组

x = [ ["a","b","c","2"], ["d","e","f",""], ["g","h","i","j"] ]
我试图打印每个数组的第n个元素,这些元素按块分组,如下所示:

Begin
- Value a -
- Value d -
- Value g -
End
Begin
- Value b -
- Value e -
- Value h -
End
Begin
- Value c -
- Value f -
- Value i -
End
Begin
- Value 2 -
- Value   -
- Value j -
End
下面的代码是我尝试过但没有成功的代码。我得到“无法将字符串转换为整数(TypeError)”

提前谢谢你的帮助

# 史蒂夫

如果数组中的数组大小不同,并且我尝试将字符串连接到如下所示的值,对于nil值,我会得到错误“无法将nil转换为字符串”。如何将nil作为blank值来避免该错误

例如,使用下面的数组

x = [ ["a","b"], ["d","e","f"] ]
获得输出

Begin
- Value a -
- Value d -
End
Begin
- Value b -
- Value e -
End
Begin
- Value  -
- Value f -
End
到目前为止,我得到的代码是,由于第一个数组小于第二个数组,所以我在第三次迭代中得到错误:

x = [ ["a","b"], ["d","e","f"] ]
(0…(x.map(&:size.max))。每个都有| “开始” x、 每个{|数组| p“-值”+数组[c]+“-”} “结束” 结束


再次感谢您的帮助

您应该执行
px[i][j]

此外,由于数组元素的编号范围为0到(array.size-1),因此您希望在该范围内使用三个点。两个点将为您提供一个包含结束值的范围,三个点将为您提供一个不包含结束值的范围

一个可能更简单的方法

(0...(x.map(&:size).max)).each do |c|
  puts "Begin"
  x.each { |array| p array[c] }
  puts "End"
end
还有一种方法:

x.transpose.each do |group|
  puts "Begin"
  puts group.map {|el| "- Value #{el} -"}
  puts "End"
end

谢谢史蒂夫先生的帮助和回答。它工作得很好。我不完全理解为什么“x.each{124; array | p array[0]}”打印每个数组的第一个元素,而“px[0]”打印数组的第一个数组。最初我对此感到困惑:)
x。每个{数组|
将为外部数组中的每个子数组执行块。变量
array
引用当前迭代中的子数组。因此x.each将执行三次,第一次是“array”将是第一个数组,第二次是第二个数组,等等。非常感谢Steve。我现在理解得更清楚了!再次你好Steve,我已经更新了我的原始问题。请检查下面的“#”我的新问题。我有一个关于nil值的问题。再次感谢没有问题。我能够做到这一点“x.each{124; array | p(array[c]==nil)?“value-”:“值“+array[c]。to_s+”-“}”。再次感谢。
转置
跳到这里。你好,马克,感谢您分享另一个解决方案。在您的情况下,当数组大小不同时,如何修复?
x.transpose.each do |group|
  puts "Begin"
  puts group.map {|el| "- Value #{el} -"}
  puts "End"
end