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