在ruby中反转数组(矩阵)

时间:2013-03-14 23:33:59

标签: ruby arrays for-loop matrix transpose

我有“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]
    }
}

3 个答案:

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