ネストした配列を平坦化
以下のように、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使おうと思います。
参考リンク