【Golang】配列(slice)の中の数値を合計する方法

配列(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関数を定義する方がおすすめです。

タイトルとURLをコピーしました