我有“文本”,它是一个数组数组,比方说:
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]
}
}
对于包含整数的数组数组,“文本”不是一个很好的名称。也就是说,您可能想查看 array.transpose。
你声明了一个空数组,但你没有用空数组填充它。
因为您使用的数组是空的,所以vect[j]
将始终返回nil
而不是您期望的数组。
这是更正后的代码:
vect = [[], [], [], []]
4.times do |i|
4.times do |j|
vect[j][i] = text[i][j]
end
end
您也可以为这些目的使用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]