###該当のソースコード
ruby
1i=1 2nsymp.each{|ns| 3 if ns == 1 then 4 subj_symp.each{|symp| 5 test_symps[tdis][i]=[symp] 6 i+=1 7 } 8 elsif ns==2 then 9 subj_symp.each_with_index{|symp1,idx1| 10 subj_symp.each_with_index{|symp2,idx2| 11 if idx1 < idx2 then 12 test_symps[tdis][i]=[symp1,symp2] 13 i+=1 14 end 15 } 16 } 17 elsif ns==3 then 18 subj_symp.each_with_index{|symp1,idx1| 19 subj_symp.each_with_index{|symp2,idx2| 20 subj_symp.each_with_index{|symp3,idx3| 21 if idx1 < idx2 && idx2 < idx3 then 22 test_symps[tdis][i]=[symp1,symp2,symp3] 23 i+=1 24 end 25 } 26 } 27 } 28 end 29}
###前提・実現したいこと
上記のソースコードにはある一定の法則があります。
①ns==iである
②ひとつ前のelsifの塊(ns==i-1)の『subj_symp.each_with_index{|sympi-1,idxi-1|』の次の行に『subj_symp.each_with_index{|sympi,idxi|』を加える
③先ほど加えた『subj_symp.each_with_index{|sympi,idxi|』の次の行のifの条件に『 && idxi-1 <idxi 』を加える
④先ほど加えたifの実行文の『test_symps[tdis][i]=[symp1,symp2,symp3...,sympi-1]』に『,sympi』を加える
コードに表すと、下記のようになると思います。
ruby
1i=1 2nsymp.each{|ns| 3 if ns == 1 then 4 subj_symp.each{|symp| 5 test_symps[tdis][i]=[symp] 6 i+=1 7 } 8 elsif ns==2 then 9 subj_symp.each_with_index{|symp1,idx1| 10 subj_symp.each_with_index{|symp2,idx2| 11 if idx1 < idx2 then 12 test_symps[tdis][i]=[symp1,symp2] 13 i+=1 14 end 15 } 16 } 17 . 18 . 19 . 20 21 elsif ns==i then 22 subj_symp.each_with_index{|symp1,idx1| 23 subj_symp.each_with_index{|symp2,idx2| 24 subj_symp.each_with_index{|symp3,idx3| 25 . 26 . 27 . 28 subj_symp.each_with_index{|sympi,idxi| 29 if idx1 < idx2 && idx2 < idx3 ... && idxi-1 <idxi then 30 test_symps[tdis][i]=[symp1,symp2,symp3...sympi-1,sympi] 31 i+=1 32 end 33 } 34 . 35 . 36 . 37 } 38 }
###発生している問題
ns==5くらいの場合は5回くらいの繰り返し書けばよかったのですが、ns==10になると書くのが大変になり、ソースコード自体も長くなってしまうので改善したいです。
拙い文と説明ですが何卒ご教授お願い致します。
わかりづらい説明があれば、お手数ですが質問してください。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー