まだルビーの基礎を学んでいるので、九九を作ってみようと思いました
x = (0..7).to_a
y = []
x.each { y << x }
y
これで、各行が等しい8x8配列になります。これらは私が望まない単なるプレースホルダー値なので、値を変更するために配列インデックスを反復処理しようとします。
x.each { |i| y[i][i] = i * i }
この時点で、y
は8列の。を含む配列になります[0, 1, 4, 9, 16, ...]
。y[1][3]
なぜ二乗された値しか受け取らないのかは理解できますが、たとえば、などのインデックスの値のみが変更されることを期待しているのに、[1][1]
なぜ変更されるのかはまったくわかりません[2][2]
。
さらに、意図的に値を再割り当てしたことはありませんが、の値もx
再割り当てされます。[0, 1, 4, 9, 16, ...]
上記のコード部分により、その値が自動的に再割り当てされ、その理由がわかりません。
x
このようなテーブルを自分で作成する別の方法をいつでも調べることができますが、その結果、値が変更される原因と、インデックスの反復が期待どおりに動作しない理由を理解したいと思います。2D配列の各インデックスをより適切に反復することに移ります。これは、単純な試みで無効な出力が生成される理由を理解できる場合です。このかなり基本的なタスクを自分で理解したいのですが、今のところ障害になっています。