2013-03-14 93 views
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

“text”是不是一个很好的名称为含整数的数组的数组。这就是说,你可能想看看array.transpose

+0

方式更好!谢谢! (“文本”是因为数组实际上是被压缩的文本) – user2129353 2013-03-14 23:51:24

2

声明一个空数组,但你不空数组填补进去。

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

这里是校正后的代码:

vect = [[], [], [], []] 
4.times do |i| 
    4.times do |j| 
     vect[j][i] = text[i][j] 
    end 
end 
+0

YES!非常感谢! – user2129353 2013-03-14 23:45:48

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]