こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。
この記事では、 Rubyで配列の要素を合計するsumメソッドについて
- sumメソッドとは
- sumメソッドを使ったサンプルプログラム
と、この記事で丁寧に解説していきます。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
Rubyのバージョン | 2.6.6 |
この記事ではRubyプログラムは
C:\rubystudy
に作成しています。
sumメソッドとは
sumメソッドとは、配列の要素を合計した数を返すメソッドです。
もし配列が空であった場合、0を返します。
sumメソッドは使い方が
- パターン1:引数を指定しない場合
- パターン2:引数を指定する場合
- パターン3:ブロックを指定して、引数を指定しない場合
- パターン4:ブロックを指定して、引数を指定する場合
の合計4パターンあります。
それぞれ解説します。
パターン1:引数を指定しない場合
引数を指定しない場合は、配列の要素が単純に合計された値が返されます。
使い方サンプルは以下です。
1 2 |
sample = [1, 3] result = sample.sum |
上記の例だと、resultには4が返されます。
引数を指定しない場合の注意点として、配列の要素の中身はすべて数値である必要があります。
1 2 |
test = ["hogehoge", "test"] result = test.sum |
と文字列の要素がある配列に対してsumメソッドを実行すると
1 2 3 4 |
Traceback (most recent call last): 2: from sumsample.rb:2:in `<main>' 1: from sumsample.rb:2:in `sum' sumsample.rb:2:in `+': String can't be coerced into Integer (TypeError) |
と例外が発生します。
パターン2:引数を指定する場合
引数を指定する場合は、引数の値と配列を合計した値が返されます。
使い方サンプルは以下です。
1 2 |
sample = [1, 3] result = sample.sum(2) |
上記の例だと、resultには6が返されます。
sumメソッドの引数に数ではなく文字列を指定すると、文字列の連結もできます。
1 2 |
test = ["hogehoge", "test"] result = test.sum("") |
では、resultには
1 |
hogehogetest |
という要素をすべて連結した文字列が返されます。
パターン3:ブロックを指定して引数を指定しない場合
ブロックを指定して引数を指定しない場合は、各要素にブロック内の処理を実行し合計した値が返されます。
使い方サンプルは以下です。
1 2 3 4 |
sample = [1, 3] result = sample.sum { |num| num + 2 } |
上記の例だと、resultには8が返されます。
注意点として、パターン1と同じく配列の要素の中身とブロック内の処理はすべて数値である必要があります。
パターン4:ブロックを指定して引数を指定する場合
ブロックを指定して引数を指定する場合は、引数の値と各要素にブロック内の処理を実行し合計した値が返されます。
使い方サンプルは以下です。
1 2 3 4 |
sample = [1, 3] result = sample.sum(4) { |num| num + 1 } |
上記の例だと、resultには10が返されます。
パターン2と同じくsumメソッドの引数に数ではなく文字列を指定すると、文字列の連結もできます。
1 2 3 4 |
test = ["hogehoge", "test"] result = test.sum("") { |str| str + "/" } |
では、resultには要素をブロック内の処理が行われた
1 |
hogehoge/test/ |
という文字列が返されます。
では、次の章で実際に使ってみます。
sumメソッドを解説するプログラムの概要
sumメソッドを解説するプログラムでは、整数型の配列を用意し
- パターン1:引数を指定しない場合
- パターン2:引数を指定する場合
- パターン3:ブロックを指定して引数を指定しない場合
- パターン4:ブロックを指定して引数を指定する場合
それぞれで、sumメソッドを使い、結果を表示させます。
Rubyサンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
puts "■sumメソッドサンプル" puts "・パターン1:引数なしの場合" num_array1 = [2, 1, 3] sum_num_array1 = num_array1.sum puts "#{num_array1}の合計値:#{sum_num_array1}" puts puts "・パターン2:引数ありの場合" str_array2 = ["aa", "bb", "cc"] sum_str_array2 = str_array2.sum("AA") puts "#{str_array2}の連結:#{sum_str_array2}" puts puts "・パターン3:ブロックを指定して引数を指定しない場合" num_array3 = [1, 2, 3, 4, 5] sum_num_array3 = num_array3.sum { |num| num * 2 } puts "#{num_array3}の各要素を2倍にした合計値:#{sum_num_array3}" puts puts "・パターン4:ブロックを指定して引数を指定する場合" str_array4 = ["aa", "bb", "cc", "dd"] sum_num_array4 = str_array4.sum("SUM") { |str| str + "::" } puts "#{str_array4}の各要素を連結:#{sum_num_array4}" puts |
実行結果
Rubyプログラムを実行するやり方は、以下の記事をご参考ください。
1 2 3 4 5 6 7 8 9 10 11 12 |
■sumメソッドサンプル ・パターン1:引数なしの場合 [2, 1, 3]の合計値:6 ・パターン2:引数ありの場合 ["aa", "bb", "cc"]の連結:AAaabbcc ・パターン3:ブロックを指定して引数を指定しない場合 [1, 2, 3, 4, 5]の各要素を2倍にした合計値:30 ・パターン4:ブロックを指定して引数を指定する場合 ["aa", "bb", "cc", "dd"]の各要素を連結:SUMaa::bb::cc::dd:: |
指定した条件で、配列の要素が合計されたり連結できていることが確認できました!
まとめ:sumメソッドを使ってみよう!
以上がsumメソッドについての解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント