ruby
1 2def each_with_puts(ary) 3 ary.each do |v| 4 p v 5 if v.class == Array 6 each_with_puts (v) 7 end 8 end 9end 10 11ary = [ 12 [1,2], 13 [3,4,5], 14 [ 15 [6,7], 16 [8] 17 ] 18] 19each_with_puts ary 20 21# 実行結果 22#pry(main)> load 'sample.rb' 23#[1, 2] 24#1 25#2 26#[3, 4, 5] 27#3 28#4 29#5 30#[[6, 7], [8]] 31#[6, 7] 32#6 33#7 34#[8] 35#8 36#=> true
このように再帰関数を使って、配列の要素を分解する関数があります。
そこで今何層目の配列を処理しているのか知りたいです。
例えば [1,2] を処理している時は 2層目、[[6,7], 8]も2層目、[6,7] は3層目というような感じです。
処理の間に count という変数を入れて、 each の前後に count+= 1 として見ましたが、それだと数字がリセットされませんでした。
===========追記
回答ありがとうございます。
教えていただいた方法を試して見ましたが、ダメでした。。
どんどん数が足されて行ってしまいました。
同じ層は固定したいのですが、うまい方法はありませんでしょうか?
ruby
1def each_with_puts(ary,layer) 2 ary.each do |v| 3 p v 4 layer += 1 5 p "現在の階層は" + layer.to_s 6 if v.class == Array 7 each_with_puts(v,layer) 8 end 9 end 10end 11 12ary = [[1,2],[3,4,5],[[6,7],[8,[2323, [2,32,2], 43]]]] 13each_with_puts ary, 1 14 15#pry(main)> load 'sample.rb' 16#[1, 2] 17#"現在の階層は2" 18#1 19#"現在の階層は3" 20#2 21#"現在の階層は4" 22#[3, 4, 5] 23#"現在の階層は3" 24#3 25#"現在の階層は4" 26#4 27#"現在の階層は5" 28#5 29#"現在の階層は6"
実現したい形はこんな感じです
#pry(main)> load 'sample.rb' #[1, 2] #"現在の階層は3" #1 #"現在の階層は3" #2 #"現在の階層は2" #[3, 4, 5] #"現在の階層は3" #3 #"現在の階層は3" #4 #"現在の階層は3" #5 #"現在の階層は3"
====再追記
ruby
1pry(main)> load 'sample.rb' 2[1, 2] 31 42 5"現在の階層は1" 6[3, 4, 5] 73 84 95 10"現在の階層は2" 11[[6, 7], [8]] 12[6, 7] 136 147 15"現在の階層は3" 16[8] 178 18"現在の階層は4" 19"現在の階層は3" 20
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。