LoginSignup
1
0

Rubyでよく使われる繰り返し処理❗️eachとmapの違い、while文とinjectの使い方について

Last updated at Posted at 2021-08-25

繰り返し処理とは

同じ処理を何回も繰り返すことです

〇〇回繰り返し処理をやる」「条件を満たすまで処理をする
みたいな処理を繰り返す処理のことです。

例えばloop,for文などあります。

eachとmapの違い

⚫︎eachは繰り返し処理の時に使います。
⚫︎mapは繰り返し処理の結果を配列にしたい時に使う。

eachの使い方

まずeachの使い方を見ていきましょう。

eachは英語でそれぞれという意味です。
例えば a= [1,2,3]なら配列の中身を先頭から順番に処理が繰り返される。
webアプリでよく使われる処理です。
例えばTwitterのつぶやきなどを取り出してきてブラウザの画面に表示するときに使える。

each構文

オブジェクト.each do |変数|
  実行する処理1
  実行する処理2
end

引用 https://www.javadrive.jp/ruby/for/index5.html

 scores = [1,2,3]
 scores.each do |score|
    score*2
 end

 p scores

[1, 2, 3] と出力

他にも使い方を見ていきます。
eachは配列scoresの各要素の数字を2倍にした結果を出力しています。

scores = [10,20,30,40,50,60]

 scores.each do |score|
    puts score   
  end

puts scoreの部分はsとかにしてもokです。

scores.each do |s|
    puts s 
  end

*putsは1回しかない 。eachでscoresに入ったデータを取り出します。
取り出したものをscoreという変数に入れている。

⚫︎出力結果

10
20
30
40
50
60

mapの使い方

scores = [1,2,3]
scores.each do |score|
    score*2
end

p scores

[2, 4, 6]と出力

結果として配列scoresの各要素の数字を2倍した結果を配列として出力されています。

2つを比較して

eachとmapを比較すると

eachはただscoresの中の[1,2,3]を出力しているだけですが
mapはresult = 〜の配列として出力しています。

while文とは

While文は繰り返し処理で使うもので、
指定された条件が真(true)である限り、ブロック内のコードを繰り返し実行するためのループ構造です。

while文の使い方

while文の使い方を見ていきます。


a = 0
while(a < 200)
    puts a
    a = a + 20
end

で実行するとすると

0
20
40
60
80
100
120
140
160
180

と出力。

これはまず a=0で定義します。 
while(a < 200)は200より下の数まで処理がされるということです。
puts a と a + 20で 0 + 20の20を出力させます。
その後、aが20となり a+20 つまり 20 + 20が処理をされて40と出力されます。
その後、aが40となり、 a + 20 が 40 + 20が処理をされて60と出力されます。
これが200より下の数字まで続くわけです。

補足でdoも使えます。

score = 0
while score <100  do
    puts  "number #{score}"
    score = score + 1
end

他にもuntilやloopなど繰り返し処理は色々あるので調べてみてください。

#injectの使い方
injectは注入という意味です。
scoresの合計を繰り返し処理で出力させていきます。

scores = [40,60,80,100,120]

sum= 
scores.inject do |result,i|
   result  + i
   
end

puts sum

scoresの合計を出します。実行すると

400

になります。
処理の流れとしては、40+ 60で100になって100+80で180になってと
このような流れを繰り返します。

処理の流れを理解するには

デバックでbinding.pryを挟みながらやると繰り返し処理の流れが把握できます。
resultとiを入力しながらcontinueで処理を進めていくとわかりやすいかと思います。

デバックはこちらを参照してみてください。

最後に

繰り返し処理は他にもたくさんあります。
loop until for times などたくさんあるので調べて実装してみてください。

参考資料

補足

投稿日 2021年08月21日のeach文に関する記事と2021年09月12日のwhile文、
2021年10月19日のinjectの記事を合わせた記事です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0