Ruby配列の完全入門!ネスト配列と多次元配列の扱い方をやさしく解説
生徒
「Rubyの配列の中に、さらに配列が入っているものを見たんですが、どうやって使うんですか?」
先生
「それはネスト配列や多次元配列と呼ばれるものですね。箱の中に箱が入っているイメージです。」
生徒
「取り出し方や、平らにする方法が難しそうで不安です…」
先生
「大丈夫ですよ。順番に見ていけば、初めてパソコンを触る人でも理解できます。」
1. ネスト配列・多次元配列とは?
Rubyの配列は、複数の値をひとまとめにして管理できる便利な仕組みです。 その配列の中に、さらに配列が入っている状態をネスト配列と呼びます。 また、表のように行と列を持つ形は多次元配列とも言います。
例えるなら、引き出しの中に小さな箱があり、その箱の中に物が入っている状態です。 Rubyでは、このような構造を自然に扱うことができます。 「ネスト」という言葉は「入れ子」という意味で、難しく感じますが、 実際は配列の中に配列があるだけです。
2. 多次元配列の基本的な書き方
Rubyで多次元配列を作るときは、配列の中に配列を書くだけです。 二次元配列は、表計算ソフトの行と列を思い浮かべると理解しやすくなります。
scores = [
[80, 90, 70],
[60, 85, 75],
[90, 88, 92]
]
この例では、外側の配列に3つの配列が入っています。 それぞれが1行分のデータだと考えると、イメージしやすくなります。
3. ネスト配列から値を取り出す方法
ネスト配列の中身を取り出すには、インデックスを順番に指定します。 インデックスとは、配列の中での位置番号のことで、0から始まる点が特徴です。
scores = [
[80, 90, 70],
[60, 85, 75],
[90, 88, 92]
]
puts scores[0][1]
90
最初の[0]で外側の配列の1番目を指定し、
次の[1]で内側の配列の2番目を指定しています。
二段階で箱を開けるイメージを持つと理解しやすくなります。
4. flattenで配列を平らにする
ネスト配列を扱っていると、「全部まとめて1つの配列にしたい」 という場面がよくあります。 そんなときに使うのがflattenメソッドです。
flattenは、重なっている配列を一気に広げて、1列に並べ直す働きをします。 山積みの箱をすべて床に並べるようなイメージです。
numbers = [[1, 2], [3, 4], [5, 6]]
flat = numbers.flatten
puts flat
1
2
3
4
5
6
flattenを使うと、ネストの深さを意識せずに扱えるようになります。 初心者のうちは、「配列が平らになる」と覚えるだけで十分です。
5. flattenの深さを指定する
flattenには、どこまで平らにするかを指定する方法もあります。 深いネスト構造の場合、一部だけを平らにしたいこともあります。
array = [1, [2, [3, 4]]]
puts array.flatten(1)
1
2
[3, 4]
数字は「どの段階まで広げるか」を意味しています。 無理に覚えなくても、「指定できる」ということを知っておくだけで安心です。
6. transposeで行と列を入れ替える
多次元配列を表として扱うときに便利なのがtransposeです。 transposeは、行と列をひっくり返すメソッドです。
例えば、縦に並んだデータを横に並べ替えたいときに使います。 表の向きを変えると考えると分かりやすいです。
table = [
["名前", "年齢"],
["田中", 20],
["佐藤", 22]
]
puts table.transpose
名前
田中
佐藤
年齢
20
22
transposeを使うと、データの見方を簡単に変えることができます。 配列の形を理解する力が、自然と身についていきます。
7. ネスト配列を扱うときの注意点
ネスト配列や多次元配列は便利ですが、 構造が分からなくなると混乱しやすいという特徴もあります。 そのため、紙に図を書いたり、箱のイメージで考えることが大切です。
Rubyではflattenやtransposeといった便利なメソッドが用意されているので、 無理に複雑な処理を書かなくても対応できます。 初心者のうちは、「取り出す」「平らにする」「向きを変える」 この3点を意識するだけで十分です。