• 締切済み

Rubyで配列を使ったfor文の中に条件つきif文

Rubyで配列を使ったfor文の中に条件付きのif文を入れてループさせたいのですが、基本的な構文が分かりません。 for i in array     if i == 9       array[i] << 'ア'     end end という雰囲気で書きたいのですが、どうしたらよいでしょうか。 i番目のループまで、配列のarrayを走査するにはどうすればよいでしょうか。 基礎的な質問ですみません。よろしくお願いします。

みんなの回答

  • clldcool
  • ベストアンサー率0% (0/0)
回答No.4

array = [1,2,3,4,5] array.each_with_index do |value,index| if index == 1 then puts value # => 2 end end indexが0からスタートするのに注意

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

=begin ANo.1で他の方が指摘されている通り、次の2点を注意事項として挙げておきます。 ・Rubyを使う際にはforよりeach系ブロック構文を利用する。 ・配列操作中に対象配列の破壊的操作は避ける >i番目のループまで、配列を走査する 以降はこれに絞った上でいくつか書いてみます。 尚、動作確認環境は Ruby1.8.7 です。 =end array = %w[a b c d e] goal = 3 # これが「i」です。 array.each_with_index do |value, index| break unless index < goal puts value end puts '-----------' goal.times do |index| puts array[index] end puts '-----------' # RubyのArrayに於けるindexは0から始まるため、今回の様な「i番目」にuptoは向かない # (「indexがiまで」であれば、こちらの方が良い) 0.upto goal do |index| puts array[index] end

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.2

配列を0番目の要素から順に見ていくというのなら、以下で如何でしょうか。 array = %w(a b c d e) p array # => ["a", "b", "c", "d", "e"] for i in (0...array.size) if i == 3 array[3] << 'z' end end p array # => ["a", "b", "c", "dz", "e"] array.sizeで配列の要素数を取得して (0...array.size)で、0番目から要素数-1までの範囲という意味になります。

回答No.1

配列のarrayを走査には、 array = ["abc","def"] array.each { |i| puts i } のように、eachを使うのが一般的だと思います。(上記は配列の各要素を表示するもの) rubyでは、for構文より、eachメソッドの方をよく使います。 ただ、質問のように、走査中の配列に、要素を追加するのは、どの言語でも止めたほうがいいです。 追加した要素がループ中にどうなるのか、予想のつかないことが起きることが多いです。 質問のように、配列のn番目に要素を追加したいのであれば、 array.insert(2,"gh") のようにinsertを使うのがよいと思います。 操作中の配列に要素を追加したいような場合は、そのまま追加するのではなく、別の配列を用意して追加してもよいでしょう。 rubyのArrayクラスの詳細をより知りたい場合はリファレンスマニュアルを参照してください。 http://www.ruby-lang.org/ja/man/html/Array.html