0

我有“文本”,它是一个数组数组,比方说:

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]
    }
}
4

3 回答 3

4

对于包含整数的数组数组,“文本”不是一个很好的名称。也就是说,您可能想查看 array.transpose

于 2013-03-14T23:45:41.943 回答
2

你声明了一个空数组,但你没有用空数组填充它。

因为您使用的数组是空的,所以vect[j]将始终返回nil而不是您期望的数组。

这是更正后的代码:

vect = [[], [], [], []]
4.times do |i|
    4.times do |j|
        vect[j][i] = text[i][j]
    end
end
于 2013-03-14T23:41:44.390 回答
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]
于 2013-03-14T23:54:55.210 回答