我有“text”这是一个数组数组,让我们说:
1 2 3
4 5 6
7 8 9
我只是想创建另一个数组数组,但是像这样:
1 4 7
2 5 8
3 6 9
我无法让它发挥作用。它说:undefined method '[]=' for nil:NilClass
vect = Array.new()
3.times{|i|
3.times{|j|
vect[j][i] = text[i][j]
}
}
答案 0 :(得分:4)
“text”对于包含整数的数组数组来说不是一个很好的名称。也就是说,你可能想看看array.transpose。
答案 1 :(得分:2)
您声明了一个空数组,但是没有用空数组填充它。
由于您使用的数组为空,vect[j]
将始终返回nil
而不是您期望的数组。
以下是更正后的代码:
vect = [[], [], [], []]
4.times do |i|
4.times do |j|
vect[j][i] = text[i][j]
end
end
答案 2 :(得分:0)
出于这些目的,您也可以使用Matrix课程,例如:
require 'matrix'
m1 = Matrix[[1,2,3], [4,5,6],[7,8,9]]
m1.to_a.each {|r| puts r.inspect} #=> This is just print the matrix in that format.
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
- Transposed Version -
m1.transpose.to_a.each {|r| puts r.inspect} #=> Note the method `transpose` called. The rest is just for printin.
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]