在块中打印相同索引的数组元素

时间:2014-05-06 22:49:22

标签: 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
- 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] +“ - ”}      把“结束”    端

再次感谢您的帮助

2 个答案:

答案 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