拥有如下数组的数组。
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
下面的代码是我尝试过但没有成功的代码。我得到“无法将String转换为整数(TypeError)”
x = [ ["a","b","c","2"], ["d","e","f",""], ["g","h","i","j"] ]
for j in 0.. x.map(&:size).max
p "Begin"
for i in 0..x.size
p x["#{i}"]["#{j}"]
end
p "End"
end
提前感谢您提供任何帮助
#史蒂夫,
如果里面的数组有不同的大小,我尝试将字符串连接到下面的值,对于nil值,我得到错误“无法将nil转换为字符串”。为了避免这个错误,如何将其作为blanck值?
例如,将数组放在
之下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))。每个都做| c | 把“开始” x.each {| array | p“ - 值”+数组[c] +“ - ”} 把“结束” 端
再次感谢您的帮助
答案 0 :(得分:1)
你应该做p x[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
答案 1 :(得分:1)
这是另一种方式:
x.transpose.each do |group|
puts "Begin"
puts group.map {|el| "- Value #{el} -"}
puts "End"
end