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