Rubyで二次元配列をマスターする全解説12選

Rubyで二次元配列を学ぶステップバイステップのイラストRuby
この記事は約9分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、プログラミング言語Rubyにおける二次元配列の全てをマスターすることができるようになります。

そもそも二次元配列とは何か、どのように作り、使い、対処すべき注意点は何か、そしてどのようにカスタマイズするのか、初心者の方でもステップバイステップで理解できるように丁寧に説明します。

●Rubyの二次元配列とは

Rubyの二次元配列は、配列の中に配列が含まれるデータ構造です。

文字通り、2つの次元、つまり行と列を持つため、行列や表形式のデータを表現するのに非常に便利です。

●二次元配列の作り方

Rubyにおいて二次元配列を作成する方法は、初心者から上級者まで幅広く利用される重要なテクニックです。

基本的には、配列の中に別の配列を挿入することで二次元配列が形成されます。

この方法は、多次元のデータを扱う際に非常に便利であり、さまざまなアプリケーションで使用されます。

○基本的な作り方

Rubyで二次元配列を作成する最も基本的な方法は、配列の中にさらに配列を入れることです。

このアプローチにより、行と列を持つデータ構造を簡単に作成することができます。

具体的なコードを見てみましょう。

○サンプルコード1:二次元配列の初期化

下記のサンプルコードは、Rubyにおける二次元配列の初期化方法を表しています。

# 二次元配列の初期化
two_dimensional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 出力
p two_dimensional_array

このコードでは、配列[1, 2, 3]、[4, 5, 6]、[7, 8, 9]がそれぞれ別の配列としてtwo_dimensional_arrayに挿入されています。

この配列の中に配列を入れる構造が、二次元配列の作り方の基本です。

実行すると、次のような出力が得られます。

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

この例からわかるように、Rubyでの二次元配列の作り方は非常にシンプルで直感的です。

この基本を理解することで、より複雑なデータ構造への理解も深まります。

●二次元配列の詳細な使い方

Rubyでの二次元配列の使い方を掘り下げることで、より複雑なデータ構造の操作が可能になります。

ここでは、二次元配列の要素へのアクセス、値の代入、そして特定の行や列の取り出し方について具体的な例を通じて学びます。

○サンプルコード2:二次元配列の要素へのアクセス

二次元配列の特定の要素にアクセスするには、行と列のインデックスを指定します。

# 二次元配列の初期化
two_dimensional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 要素へのアクセス
element = two_dimensional_array[1][2]
puts element

この例では、two_dimensional_array の2行目(インデックスは1)の3列目(インデックスは2)の要素にアクセスしています。

出力結果は次の通りです。

6

○サンプルコード3:二次元配列への値の代入

二次元配列の特定の要素に新しい値を代入することも可能です。

# 二次元配列の初期化
two_dimensional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 値の代入
two_dimensional_array[1][2] = 10

# 出力
p two_dimensional_array

このコードでは、two_dimensional_array の2行目の3列目の要素に値 10 を代入しています。

出力結果は次の通りです。

[[1, 2, 3], [4, 5, 10], [7, 8, 9]]

○サンプルコード4:二次元配列の要素の取り出し

二次元配列から特定の行や列を取り出すこともできます。

# 二次元配列の初期化
two_dimensional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 要素の取り出し
row = two_dimensional_array[1]

# 出力
p row

この例では、two_dimensional_array の2行目を取り出しています。

出力結果は次の通りです。

[4, 5, 6]

●二次元配列の応用例

Rubyでの二次元配列の応用は、データの整理や行列計算など多岐にわたります。

ここでは、スプレッドシートのデータ管理や行列の計算という二つの実用的なシナリオを取り上げ、それぞれのサンプルコードを通じてその使い方を紹介します。

○サンプルコード5:二次元配列を使ったデータの整理

スプレッドシートのような構造のデータを二次元配列で表現し、特定のデータを取り出す方法を見てみましょう。

# スプレッドシートのデータを二次元配列で表現
spreadsheet_data = [
  ['名前', '年齢', '住所'],
  ['田中', '30', '東京'],
  ['鈴木', '25', '大阪'],
  ['佐藤', '35', '福岡']
]

# 名前を取り出す
names = spreadsheet_data.map { |row| row[0] }

# 名前の一覧を出力
p names

このコードでは、spreadsheet_data という二次元配列でスプレッドシートのデータを表現しています。

map メソッドを使用して各行から名前のデータを取り出し、新しい配列 names に格納しています。

出力結果は次の通りです。

["名前", "田中", "鈴木", "佐藤"]

○サンプルコード6:二次元配列を使った行列の計算

二次元配列は、数学的な行列の計算にも利用することができます。

下記のコードは行列の加算を行う例を表しています。

# 二次元配列の初期化
matrix1 = [[1, 2, 3], [4, 5, 6]]
matrix2 = [[6, 5, 4], [3, 2, 1]]

# 行列の加算
result = []
matrix1.each_with_index do |row, i|
  result_row = []
  row.each_with_index do |elem, j|
    result_row << elem + matrix2[i][j]
  end
  result << result_row
end

# 出力
p result

このコードでは、二つの二次元配列 matrix1matrix2 を加算して、新しい二次元配列 result を作成しています。

each_with_index メソッドを使用して各行とそのインデックスを取り出し、さらに各要素とそのインデックスを取り出して、対応する要素同士を加算しています。

出力結果は次の通りです。

[[7, 7, 7], [7, 7, 7]]

●二次元配列の注意点と詳細な対処法

Rubyで二次元配列を使う際には、一部注意が必要なポイントが存在します。

ここでは、その主なものと対処法について詳しく説明します。

①二次元配列の各行の長さが一致しない場合

二次元配列では、理論上は各行の長さが異なっていても問題ありません。

しかし、全ての行の長さが同じであるという前提でコードを書いている場合、意図しないエラーや挙動を引き起こす可能性があります。

そのため、全ての行の長さが同じであることを確認するか、あるいはコードが異なる長さの行を適切に処理できるようにすることが重要です。

②二次元配列を作成する際の短絡評価

RubyのArrayクラスのnewメソッドを使って二次元配列を作成する際、第二引数にオブジェクトを直接指定すると、そのオブジェクトが全ての行で共有されてしまいます。

これはRubyの短絡評価(評価の途中で結果が確定した時点で評価を終了する特性)のためです。

この問題を避けるためには、newメソッドの第二引数にブロックを指定し、その中で新しいオブジェクトを生成するようにします。

③ネストした配列の変更

Rubyの配列は参照型であるため、ネストした配列(二次元配列など)の一部を別の配列にコピーしてから変更すると、元の配列も影響を受けます。

これは意図しない結果をもたらす可能性があります。

この問題を避けるためには、dupメソッドやcloneメソッドを使ってネストした配列の深いコピーを作成するか、あるいはネストした配列を変更する前にその影響を完全に理解していることが重要です。

●二次元配列の詳細なカスタマイズ方法

Rubyの二次元配列は、様々なカスタマイズを行うことが可能です。

ここでは、二次元配列のサイズ変更とソートについて具体的なコードとともに解説します。

○サンプルコード7:二次元配列のサイズの変更

二次元配列のサイズを変更する方法として、配列のpushメソッドやpopメソッドを使用することができます。

これらのメソッドは、配列の最後に要素を追加したり、最後の要素を削除したりすることで、配列のサイズを動的に変更します。

# 二次元配列の初期化
matrix = [[1, 2, 3], [4, 5, 6]]

# 新しい行を追加
matrix.push([7, 8, 9])

# 出力
p matrix

このコードでは、初期化した二次元配列matrixに新しい行を追加しています。

pushメソッドによって、新たな配列[7, 8, 9]matrixの最後に追加されます。

実行結果は次の通りです。

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

このように、Rubyの配列のメソッドを利用することで、二次元配列のサイズを柔軟に変更することが可能です。

○サンプルコード8:二次元配列のソート

次に、二次元配列のソート方法について見ていきましょう。

Rubyでは、配列のsortメソッドを使用して配列の要素をソートすることができます。

sortメソッドにブロックを渡すことで、カスタムのソート条件を設定することも可能です。

# 二次元配列の初期化
matrix = [[2, 3, 1], [5, 4, 6], [8, 9, 7]]

# 各行をソート
sorted_matrix = matrix.map { |row| row.sort }

# 出力
p sorted_matrix

このコードでは、二次元配列matrixの各行をソートしています。mapメソッドとsortメソッドを組み合わせることで、各行を個別にソートし、その結果から新しい二次元配列sorted_matrixを作成しています。

実行結果は次の通りです。

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

このように、Rubyのsortメソッドを使用すれば、二次元配列の各行を簡単にソートすることができます。

まとめ

この記事では、Rubyでの二次元配列の基本的な作り方から詳細な使い方、注意点、そしてカスタマイズ方法について解説しました。

これらの情報が、Rubyで二次元配列をより深く理解し、効果的に利用するための一助になれば幸いです。