Rubyで配列を使ったfor文の中に条件付きのif文を入れてループさせたいのですが、基本的な構文が分かりません。
for i in array
    if i == 9
      array[i] << 'ア'
    end
end

という雰囲気で書きたいのですが、どうしたらよいでしょうか。
i番目のループまで、配列のarrayを走査するにはどうすればよいでしょうか。
基礎的な質問ですみません。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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からスタートするのに注意
    • good
    • 0

=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
    • good
    • 0

配列を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までの範囲という意味になります。
    • good
    • 0

配列の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
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qトランプ大統領のシリア攻撃声明文の中でわからない文があります

Tonight, I ordered a targeted military strike on the airfield in Syria from where the
chemical attack was launched.
文中from はいったい何なのでしょう?
当初、Tonight/ I ordered /a targeted military strike / on the airfield in Syria/ from where
the chemical attack was launched.
で区切ってwhereは関係副詞で解釈していたのですが、思えば関係副詞は前置詞が含まれていると考えるからfromがいらないはず。となるとfromが邪魔になってくるのですが。わかる方よろしくご教授願います。

Aベストアンサー

確かにかたい英語でいうと whence でしょうが、
使われている英文は見たことがありません。
辞書には載っていますが。

from の有無でなく、from which じゃないのか、
という疑問はもっともですが、それを #1 で述べているのです。

「それから」なのか「そこから」なのか。
一つ、文法的に理解しようと思えば、
from where であれば、the airfield というより、
on the airfield に対して
from / on the airfield となっている感じ。

実際には from the airfield でいいのでしょうが、
from it「それから」より、from there「そこから」
なんでしょう。

結局、疑問詞で Where are you from?
というのが正しいところに行き着くわけです。

country の意味を入れようと思うと
What/Which country are you from?
でしょう。

QRuby expect 条件文(if文)の書き方

Rubyでexpectライブラリを利用して、対話的な処理を自動で行おうと思っています。

その場合に、条件文(if文)をどうやって書いていいのか分からず困っています。
※条件文の必要のないサンプルプログラムは検索したところいろいろあったのですが・・・

例えば
spawn("ssh #{hostname}") do
expect(/User \(.*\): /) { |match| user }
expect(/[Pp]assword: /) { |match| pass }
expect(/[\>\$] /) {|match| command }
このcommmandの実行結果がAならば
expect(/A/) {|match| command2 }
そうではなくBならば
expect(/B/) {|match| command3 }
end

ぜひよろしくお願いいたします。

Aベストアンサー

expect( /[\>\$] / ){|match| command }
expect( /(A|B)/ ){ |match|
case match[1]
when Aに一致? then command2
when Bに一致? then command3
end
}

――とか。

Q韓国大統領選で財閥系企業にブレーキをかけられそうな

韓国大統領選で財閥系企業にブレーキをかけられそうな候補はどちらでしょうか?

サムソン、ヒュンダとかの利益や競争力を削ってでも格差是正を優先してくれそうな候補を応援したいのですがどちらでしょうか?
現政権になってから財閥絶好調、その他庶民不幸な印象で、野党の文氏が勝った方がいいのかなと思いますが、女性大統領による経済の迷走も期待しちゃう?

Aベストアンサー

韓国の文化では、大統領になるのは勝ち組になるということです。
日本の総理大臣とはわけがちがいます。

勝ち組はその他一般の庶民を無視して、勝ち組のいっそうの繁栄を求めることが認められている文化です。

ですから、誰が大統領になっても、負け組みに有利な政策ってのは考えられないです。

このような弱肉強食の未開国家を嫌って、なんと国民の70%が、できることなら韓国を捨てて他国に移民したいと考えている国なんです。

日本の常識で韓国・朝鮮を考えると判断を誤りますね。

Q【ruby】二つのブロック付きメソッドをif文で使い分けたい

二つのブロック付きメソッドhogeとpiyoがあるとします。
ブロックの中に記述するプログラムは同じだが、hogeを使うか、piyoを使うかは条件により制御したいです。
このような場合、どのように書いたら簡素になるでしょうか?

sw=true
if sw then
 hoge() do |x|
  puts x
 done
else
 piyo() do |x|
  puts x
 done
end

上記例では冗長の思うのですが、ご指導のほど宜しくお願いいたします。

Aベストアンサー

以下のように、ブロックを一旦、変数に格納すればすっきりすると思います。

block = proc {|x| puts x }
if sw
hoge &block
else
piyo &block
end

__send__(あるいはsend)を使うと1行で書けます。

__send__( sw ? 'hoge' : 'piyo', &proc {|x| puts x } )

メソッドがたくさんある場合は以下のようにすることもできます。

sw = 2
__send__( %w(hoge fuga piyo foo bar baz)[sw], &proc {|x| puts x } )

Q韓国 大統領選挙

韓国の大統領選挙について、お伺いいたします。

安哲秀候補が、出馬を断念したそうです。
これにより、与党の朴槿恵候補と野党の文在寅候補の一騎打ちとなるようです。

そこで教えていただきたいのですが、あの日本にとっては失礼極まりない李明博はどうなったのでしょうか?
立候補しないという事ですか?

何て卑怯な人間なのかと思います。あれだけ騒がせておいて。彼は韓国人の代表ではなくて、韓国の“恥さらし”だったのですか。だとしたら、北朝鮮にパンツ一丁で放り込めば良いと思います。

また、新大統領が誕生して、日韓関係はどのようになって行くと考えられますか?

Aベストアンサー

 現行の大韓民国憲法では大統領の再任は禁止されております
なので出たくても出れません

Qruby for文

for文を用いる
s=1+2+5+10+17...+50

s=0;i=1;j=1
for i in 1..100
s+=1
i+=j
if i>50
break
end
j+=2
end
puts s

この問題の意味がよくわかりません。。
よかったら説明してくれると助かります。。
j+=2
ここはなんで2なんしょうか?
特にここのところはなんでこうなっているんですか?

iとかjとかを使っている意味がわかりません。。

Aベストアンサー

そもそも、s=...の式とプログラムとが一致してないので、説明もなにもないですが。
実行したら 18 と表示されました。

1=1
2=1+1
5=2+3
10=5+5
17=10+7
26=17+9 ←書いてないけど、それまでのパターンから推測
37=26+11 ←書いてないけど、それまでのパターンから推測
50=37+13

と、奇数分の分増えているように見えます。なので、
i: sに加える値
j: 次のiへの増分(連続した奇数)
とすると、
> j+=2
は、「次の奇数」を計算するためのもの
という説明は付くと思います。

> s+=1
はループ回数を数えるだけのものになっているので、
s+=i
の間違いではないかと予想されます。

そうなってくると
> for i in 1..100
が問題です。
rubyのforは、リスト状のものを連続で処理するものです。CやBasicのように、変数の値を計算するものではありません。
例えば、i=2のときj=3になっているはずなので
i+=j → i=2+3=5
になります。
次のループになったとき、Cでfor(i=1;i<=100;i++)だったら、 i<=100とi++ はこの i=5 に対して評価、計算します。
しかし、rubyでは、1..100での2の次である3になってしまいます。

for k in 1..100
と、関係無い変数にすれば、一応期待通りの計算にはなりますが、美しくは無いですね。

そもそも、s=...の式とプログラムとが一致してないので、説明もなにもないですが。
実行したら 18 と表示されました。

1=1
2=1+1
5=2+3
10=5+5
17=10+7
26=17+9 ←書いてないけど、それまでのパターンから推測
37=26+11 ←書いてないけど、それまでのパターンから推測
50=37+13

と、奇数分の分増えているように見えます。なので、
i: sに加える値
j: 次のiへの増分(連続した奇数)
とすると、
> j+=2
は、「次の奇数」を計算するためのもの
という説明は付くと思います。

> s+=1
はループ回数を数えるだけのものに...続きを読む

Qアメリカ大統領に必要なこと(資質)

過去のQ&Aを見てみましたが質問が載せられていないようなので質問します。
かつてアメリカ大統領に必要な資質について聞いたことがあったのですが記憶がうろ覚えです。
急に気になりだしたので御存知の方は教えてください。

以下が覚えている部分です。最初3つの文の( )には資質が、最後2つの文の( )には動物が入ります。

ブルドックのような( )
ダチョウのような( )
馬のような( )
( ) のようなユーモア
( )のような人なつこさ

この他にも10~15程度の文があったと思うのですが併せてお願いします。

Aベストアンサー

#1です。
スミマセン、URLを訂正します。

参考URL:http://www.geocities.jp/minami_zatugaku/vol_196_01.htm

QRubyでのFor文の書き方

RubyのFor文でCのように細かくループ・カウンタの増減を制御したい場合、どのように書くのが一般的なのでしょうか。

想定しているのはこんな感じです。

int i;
for(i = 0; i <= 100; i = i + 0.2) {
//do something
}

普段は何気なくwhile文やuntil文を使ってしまうんですが、ちょっと気になったので質問させて頂きました。ご存知のかたがいらっしゃいましたらお知恵を拝借させてください。

Aベストアンサー

0.step(100, 0.2) do |i|
puts i
end


Rangeオブジェクトを使った例
(0..100).step(0.2) do |i|
puts i
end


forを使用してみました
for i in 0.step(100, 0.2) do
puts i
end

for i in (0..100).step(0.2) do
puts i
end

どの書き方が一般的なのかはわからないです、スミマセン。
自分だったら観て意味が把握しやすい2番目の書き方を使用する様な気がします。

Qアメリカで自閉症の男の子が最後の試合で活躍して大統領に表彰された感動の話の本知ってますか?

アメリカの話で自閉症かなんかの病気を持っていて、バスケットのマネージャーをやっていた男の子が最後の試合に出て活躍して大統領に表彰された話が書いてある本ってご存知の方教えてください。
子供が夏休みの感想文を書くのにいいかと思って

Aベストアンサー

> 自閉症

私には本は見つけられませんでしたが…
↓このページの内容のことですかね?

http://youtubelistening.blog116.fc2.com/blog-entry-151.html

Qcgi上のhtmlをrubyのifで条件分岐

rubyでcgiをつくっています。 htmlのinputとruybの絡めかたがわかりません教えてください。

まず下記のようにボタンを設置して、

<form>
<input type="button" value="新規登録">
</form>

 ↑ ボタンを押したら、LoginとIDの登録フォームがでてきて、 それ以外なら変化なし のようなものをつくりたいのですが、どのようにifで書けばよいのかが分かりませんでした。教えてくださいよろしくお願いします。

Aベストアンサー

No1です。

登録画面の方は出来ているのなら、新規登録ボタンの部分はJavaScriptがいいんじゃないでしょうか。

<html>
<head><title>実験</title></head>
<script>
function regist(){
document.getElementById("regist").setAttribute("style","display: block");
document.getElementById("new").setAttribute("style","display: none");
}
</script>
<body>

<input id="new" type="button" value="新規登録" onclick="regist()">

<div id="regist" style="display: none">
<form action="test.cgi" method="post">
Username: <input type="text" name="login"><br>
Password: <input type="password"
name="password"><br>
<input type="submit" value="login">
</form>
</div>
</body></html>

No1です。

登録画面の方は出来ているのなら、新規登録ボタンの部分はJavaScriptがいいんじゃないでしょうか。

<html>
<head><title>実験</title></head>
<script>
function regist(){
document.getElementById("regist").setAttribute("style","display: block");
document.getElementById("new").setAttribute("style","display: none");
}
</script>
<body>

<input id="new" type="button" value="新規登録" onclick="regist()">

<div id="regist" style="display: none">
<form action="test.cgi" method="...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング