配列(slice)内の数値を合計する
Golangにおいて配列の中の数値を全て合計する場合、for..range文でループ処理を回し、要素を1つずつ足します。
sum := 0
for _, number := range numbers {
sum += number
}
Rubyとかの言語だと、合計値を求める用のsumメソッドがあったりしますが、Golangだとfor..range文で配列(slice) に対してループ処理をする必要があります。
[1, 2, 3, 4, 5].sum #=> 15
具体的なコード例
[1, 2, 3, 4, 5]という配列を作って、この配列内の数値を合計する処理を行います。
main関数の中でforループを回す場合
package main
import (
"fmt"
)
func main() {
numbers := []int{1, 2, 3, 4, 5}
sum := 0
for _, number := range numbers {
sum += number // 変数sumに配列内の数値が順に足される
}
fmt.Println(numbers)
fmt.Println(sum) // 最終的な合計値を出力
}
実行結果は以下の通り
[1, 2, 3, 4, 5]
15
sum関数を自作する場合
上記のようにいちいちfor..range文でループを書きたくない場合は、合計値を求める関数を自作するのもありです。
package main
import (
"fmt"
)
// sum関数を定義する
func sum(numbers []int) int {
sum := 0
for _, number := range numbers {
sum += number
}
return sum
}
func main() {
numbers1 := []int{1, 2, 3, 4, 5}
sum1 := sum(numbers1) // Sum関数を呼び出す
numbers2 := []int{9, 3, 6, 7, 1}
sum2 := sum(numbers2) // Sum関数を呼び出す
fmt.Println(numbers1)
fmt.Println(sum1)
fmt.Println(numbers2)
fmt.Println(sum2)
}
実行結果
[1 2 3 4 5] # number1の中身
15 # number1の合計値
[9 3 6 7 1] # number2の中身
26 # number2の合計値
この形式だと必要な部分でsum関数を呼び出すだけで良いので、コードがすっきりしますね。
複数箇所で合計値を求める場合は、sum関数を定義する方がおすすめです。