はじめてのRuby!flattenメソッドで多次元配列を一次元配列にする

Rubyには多次元配列やハッシュを1次元配列にするためのflattenメソッドがあります。

  • 結合された多次元配列を1次元配列にしたい
  • ハッシュを1次元配列にしたい

そのような方に向けて、この記事ではflattenメソッドについて以下の内容を解説していきます。


【基礎】flattenメソッドとは
【基礎】flattenメソッドで多次元配列を1次元配列にする
【基礎】flattenメソッドでハッシュを1次元配列にする
【発展】破壊的メソッドflatten!の使い方

この記事ではflattenメソッドについてわかりやすく解説していますので、ぜひ参考にしてください。

目次

flattenメソッドとは

flattenは多次元の配列やハッシュ(Hash)を平坦化(1次元配列)にするためのメソッドです。

flattenの書き方

オブジェクト.flatten
オブジェクト.flatten(階層)

flattenメソッドは多次元の配列、ハッシュを平坦化して値を返します。

引数を指定しない場合は1次元の配列を返します。

引数を指定した場合は何階層目まで平坦化するかを指定できます。

flattenメソッドの使い方

多次元配列を1次元配列にする

まずは多次元配列を1次元配列にする方法を紹介します。

次のサンプルをご覧ください

# 配列を定義
array1 = [1, 2, [3, 4, 5, [6, 7,[8, 9]], 10]]

p "変更前:#{array1}"

# 多次元配列を1次元配列にする
array2 = array1.flatten

p "変更後:#{array2}"

実行結果:

"変更前:[1, 2, [3, 4, 5, [6, 7, [8, 9]], 10]]"
"変更後:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"

このようにflattenメソッドを使用すれば、ややこしい多次元配列も1次元配列に変換できることがわかります。

また、先述したようにflattenは引数を指定することにより、何回層目まで平坦化するかを指定できます。

# 配列を定義
array1 = [1, 2, [3, 4, 5, [6, 7,[8, 9]], 10]]

p "変更前:#{array1}"

# 多次元配列を1次元配列にする
array2 = array1.flatten(2)

p "変更後:#{array2}"

実行結果:

"変更前:[1, 2, [3, 4, 5, [6, 7, [8, 9]], 10]]"
"変更後:[1, 2, 3, 4, 5, 6, 7, [8, 9], 10]"

ハッシュを1次元配列にする

次にflattenメソッドでハッシュを1次元配列にする方法を紹介します。

# ハッシュを定義
hash1 = { "apple" => 100, "orange" => 80, "melon" => 600 }
 
puts "変更前:#{hash1}"
 
# ハッシュを1次元配列にする
hash2= hash1.flatten
 
puts "変更後:#{hash2}"

実行結果:

変更前:{"apple"=>100, "orange"=>80, "melon"=>600}
変更後:["apple", 100, "orange", 80, "melon", 600]

このように多次元配列同様ハッシュに対して、1次元配列に変換することが可能なことがわかりますね!

flatten!の使い方

flattenには対象の配列オブジェクト自身を変更する破壊的メソッドのflatten!も使用できます。

実際に試してみましょう。

# 配列を定義
array = [1, 2, [3, 4, 5, [6, 7,[8, 9]], 10]]

p "変更前:#{array}"

# 多次元配列を1次元配列にする
array.flatten!

p "変更後:#{array}"

実行結果:

"変更前:[1, 2, [3, 4, 5, [6, 7, [8, 9]], 10]]"
"変更後:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"

このように配列オブジェクト自体が変更されていることがわかりますね!

まとめ

この記事では多次元配列やハッシュを1次元配列に変換するflattenメソッドについて、以下の内容を解説しました。

  • flattenメソッドとは
  • flattenメソッドで多次元配列を1次元配列にする
  • flattenメソッドでハッシュを1次元配列にする
  • 破壊的メソッドflatten!の使い方

flattenメソッドは1次元配列に変換したいときに非常に便利ですので、使い方については覚えておきましょう。

もし、flattenメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

システムエンジニアとして10年勤務→フリーランスへ。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

目次