やりたいこと
開発中の Rails アプリで、このようなツリー構造のレコードがあり、その子孫を全て一次元の配列に格納したいと思っています。
全くエレガントではない私のコード
Ruby
1@items = [] 2# .subs は、その子オブジェクトを全て取得します。 3 4@item.subs.each do |i2| 5 @items.push(i2) 6 i2.subs.each do |i3| 7 @items.push(i3) 8 i3.subs.each do |i4| 9 @items.push(i4) 10 i4.subs.each do |i5| 11 @items.push(i5) 12 end 13 end 14 end 15end 16 17@items.map(&:id) # [73, 170, 173, 175, 177, 178, 176, 174, 171, 172] 18
エレガントではないポイント
0. 階層が増えると、コードが増える。
0. ほぼ同じ処理を何度も書いている。
0. 再帰的な処理なので、while とかを使えそうなのに、上手く使えない無力さが如実に表れている。
お聞きしたいこと
同じ処理を、エレガントに記述する方法をご教示いただけないでしょうか。
何卒、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/01 07:25
2020/02/01 07:28
2020/02/01 08:15
2020/02/01 08:26
2020/02/02 02:28 編集