LoginSignup
10
7

More than 3 years have passed since last update.

Ruby 配列内での掛け算

Last updated at Posted at 2020-10-04

配列内での掛け算(標準入力)

3 つの整数がスペース区切りで与えられます。
3 つの整数を掛け算した数値を出力して下さい。

例えば

4 10 5

この場合 4 × 10 × 5 で

200

と出力して下さい。

やり方.1

ruby.rb
numbers = gets.split(' ').map(&:to_i)
a = 1
numbers.each do |number|
    a = a * number
end
puts a

解説

numbers = gets.split(' ').map(&:to_i)

・ getメソッドで入力要素を呼び出す
・ splitメソッドで文字列をカンマ区切りで分割する
・ mapメソッドで要素を1つづつ取り出しto_iで整数に変換する

a = 1
numbers.each do |number|
    a = a * number
end

・ a=1でaに1を代入する(初期値)
・ numbersの要素をnumber変数に代入して下の処理を繰り返す

やり方.2

injectメソッドのやり方

numbers = gets.split(' ').map(&:to_i).inject(:*)

puts numbers

injectメソッド(配列の合計を算出するメソッド)

injectはeachやmapと同じように繰り返しを行うメソッドです。

ブロックを使って繰り返し計算を行うことが特徴で、

配列オブジェクト.inject {|初期値, 要素| ブロック処理 }

のように記述します。

繰り返し順にブロックの要素が配列分加算されていき、ブロックの処理にて計算を行っていきます。

injectにシンボルを使って演算子を指定する

injectに演算子をシンボルで渡すことで、よりスタイリッシュにinjectを書くことができます。

例えば、

  • 配列の中身の合計を算出したい

  • 全部掛け合わせた値を計算したい

  • 配列の中身を使って順番に引き算をしたい

  • などさまざまな場面で使用可能です。

array = 1..6
p array.inject(:+) #配列の要素をすべて足す
p array.inject(3,:+) #初期値3に対して、配列の要素をすべて足す
p array.inject(:*) #配列の要素をすべて掛ける
p array.inject(3,:*) #初期値3に対して、配列の要素をすべて掛ける
p array.inject(100,:-) #100からarrayの合計値を引く

[実行結果]

21
24
720
2160
79

やり方.3

nums = gets.split(' ')
puts nums[0].to_i * nums[1].to_i * nums[2].to_i

まとめ

コメントでご指摘してくださったinjectメソッドを用いたやり方の方がスマートで簡単に計算ができますね!
コメントありがとうございました。

10
7
1

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
10
7