スライドショー

はじめての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メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説