ary = [30,31,1,2,3,27,28,1,2]
配列aryを出力するときに、1が来たら出力して、また1が再度出てきたら止めるような処理は出来ますでしょうか?
なお、aryの中の1の順番は変わったりするので、ary[2]、ary[7]が1とは限りません。
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
2.2.0からになりますが、 Enumerable#slice_afterを使うのはどうでしょうか?
Ruby
1ary = [30,31,1,2,3,27,28,1,2] 2ary.slice_before(1).drop(1).first.each{|i| puts i}
投稿2016/06/02 12:55
総合スコア21735
0
ruby
1ary = [30, 31, 1, 2, 3, 27, 28, 1, 2] 2 3flag = false 4ary.each do |x| 5 if x != 1 6 puts x if flag 7 else 8 flag = !flag 9 end 10end
実行結果
$ ruby a.rb 2 3 27 28
投稿2016/05/31 22:11
総合スコア22324
0
raccy さんの回答にあった slice_before を使ってみました。
ary.slice_before(1).each_with_index {|x, idx| puts x if idx % 2 == 1 }
実行例:
ruby
1$ irb 2irb(main):001:0> ary = [30, 31, 1, 2, 3, 27, 28, 1, 2] 3=> [30, 31, 1, 2, 3, 27, 28, 1, 2] 4irb(main):002:0> ary.slice_before(1).each_with_index {|x, idx| puts x if idx % 2 == 1 } 51 62 73 827 928 10=> nil 11irb(main):003:0> ary = [30, 31, 1, 2, 3, 27, 28, 1, 2] * 2 12=> [30, 31, 1, 2, 3, 27, 28, 1, 2, 30, 31, 1, 2, 3, 27, 28, 1, 2] 13irb(main):004:0> ary.slice_before(1).each_with_index {|x, idx| puts x if idx % 2 == 1 } 141 152 163 1727 1828 191 202 213 2227 2328 24=> nil 25irb(main):005:0>
投稿2016/06/04 02:08
総合スコア22324
0
ベストアンサー
a.rb
ruby
1ary = [30, 31, 1, 2, 3, 27, 28, 1, 2] 2 3flag = false 4ary.each do |x| 5 flag = !flag if x == 1 6 puts x if flag 7end
実行結果:
$ ruby a.rb 1 2 3 27 28
投稿2016/06/02 12:03
総合スコア22324
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/04 04:29