ネストした配列を平坦化

以下のように、whereで取得したレコードの配列をmapメソッドでアソシエーション先(1対多の多)のレコードの配列に変換したところ、配列の中に配列が入っている状態になってしまいました。

Hoge.where(name: argment).map{|r|r.fugas}

 

その後処理を続けるためには普通の配列に変換したいけど、どうすれば?

join(',') を実行しても一つの文字列になってしまうし。。。

と、思い調べていたところ、flatten メソッドというものを知りました!!

 

 

flattenメソッドとは

rubyの組み込みライブラリでArrayに対して使えます。

flatten は自身を再帰的に平坦化した配列を生成して返してくれます。

引数を指定して何段階まで平坦化するか指定もできます。

 

irb(main):004:0> [1, 2, 3, 4, 5, [6, 7, [8, 9]]].flatten(1)
=> [1, 2, 3, 4, 5, 6, 7, [8, 9]]
irb(main):005:0> [1, 2, 3, 4, 5, [6, 7, [8, 9]]].flatten
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

とても簡単に普通の配列にすることができました!

 

たまに配列の中に配列が入ってしまい困ることがあるので、そんな時はflatten使おうと思います。

 

 

参考リンク

 

docs.ruby-lang.org