2次元要素へのアクセス
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 11/56。
2次元配列の単一のセルを読み取ったり更新したりするには、2つのインデックス検索を連結します。最初が行を選択し、2番目が列を選択します。
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
puts matrix[0][0] # 10 (左上)
puts matrix[1][2] # 60 (行 1, 列 2)
puts matrix[2][0] # 70 (左下)セルの更新には、左辺で同じ構文を使用します:
matrix[0][1] = 99
puts matrix[0].inspect # [10, 99, 30]便利な2つの形状クエリ:
puts matrix.length # 3 (行数)
puts matrix[0].length # 3 (0行目の列数)インデックスは0から始まり、length - 1までとなります。末尾を超えると、エラーを発生させるのではなくnilを返します。
チャレンジ
初心者2次元配列 matrix が与えられます。3つの整数(3行) r1、c1、そして v を読み込みます。その後:
matrix[r1][c1]の値を出力しますmatrix[r1][c1] = vを代入しますinspectを使用して、更新されたmatrix全体を出力します
入力が 1 / 2 / 99 の場合、出力は以下の通りです:
60
[[10, 20, 30], [40, 50, 99], [70, 80, 90]]チートシート
連結されたインデックス [row][col] を使用して、2次元配列のセルにアクセスし、更新します。
matrix = [
[10, 20, 30],
[40, 50, 60]
]
puts matrix[1][2] # 60
matrix[1][2] = 99 # セルを更新
puts matrix.inspect # [[10, 20, 30], [40, 50, 99]]形状のクエリ:
matrix.length # 行数
matrix[0].length # 行0の列数インデックスは 0 から始まります。範囲外にアクセスすると nil が返されます。
自分で試してみよう
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
r1 = gets.to_i
c1 = gets.to_i
v = gets.to_i
# TODO: matrix[r1][c1] を出力し、v を代入してから、行列全体を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。