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 に答える