2013-03-14 88 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]