手段①:素直にfor..range文でループ処理をする
配列(slice)をfor..range構文でループ処理を行い、要素を1つずつ順に比較するやり方です。
初めは先頭の要素を変数maxに代入し、前の要素より数値が大きい場合に変数maxを上書きします。
package main
import (
"fmt"
)
func main() {
numbers := []int{3, 4, 7, 11, 2, 8, 9, 5}
// 最大値取得
max := numbers[0] // 配列内にある先頭の数値を取得
for _, number := range numbers {
if max < number {
max = number
}
}
// 最小値取得
min := numbers[0] // 配列内にある先頭の数値を取得
for _, number := range numbers {
if min < number {
min = number
}
}
fmt.Println(max) // => 11
fmt.Println(min) // => 2
}
自作で最大値を取得するメソッドを作る場合は、以下のようにも書けます。
package main
import (
"fmt"
)
func main() {
numbers := []int{3, 4, 7, 11, 2, 8, 9, 5}
max := max(numbers) // max関数呼び出し
min := min(numbers) // min関数呼び出し
fmt.Println(max) // => 11
fmt.Println(min) // => 2
}
// 最大値を取得するmax関数
func max(numbers []int) int {
max := numbers[0]
for _, number := range numbers {
if max < number {
max = number
}
}
return max
}
// 最小値を取得するmin関数
func min(numbers []int) int {
min := numbers[0]
for _, number := range numbers {
if min > number {
min = number
}
}
return min
}
手段②:sortパッケージを使用する
sortパッケージを使用して、配列内の数値を小さい順に並べ替えます。
そしたら先頭が最小値、末尾が最大値となるので、配列に対してインデックス番号を指定することでそれぞれ取得できます。
package main
import (
"fmt"
"sort" // sortパッケージをインポート
)
func main() {
numbers := []int{3, 4, 7, 11, 2, 8, 9, 5}
fmt.Println(numbers) // => [3 4 7 11 2 8 9 5] 並び替え前
sort.Ints(sort.IntSlice(numbers)) // sortパッケージの関数によって配列内の数値がソートされる
fmt.Println(numbers) // => [2 3 4 5 7 8 9 11] 並び替え後
fmt.Println(numbers[len(numbers) - 1]) // => 11
fmt.Println(numbers[0]) // => 2
}
自作の関数を作るとしたら以下のような書き方ができると思います。
package main
import (
"fmt"
"sort" // sortパッケージをインポート
)
func main() {
numbers := []int{3, 4, 7, 11, 2, 8, 9, 5}
max := max(numbers)
min := min(numbers)
fmt.Println(max) // => 11
fmt.Println(min) // => 2
}
// 最大値を取得するmax関数
func max(numbers []int) int {
sort.Ints(sort.IntSlice(numbers))
return numbers[len(numbers) - 1]
}
// 最小値を取得するmin関数
func min(numbers []int) int {
sort.Ints(sort.IntSlice(numbers))
return numbers[0]
}
手段③:go-funkパッケージを使用する
go-funkというGolangのライブラリを使用すると、以下のように記述するだけで簡単に配列から最大値と最小値が取得できます。
funk.MaxInt(配列) // 最大値の取得
funk.MinInt(配列) // 最小値の取得
実際に使用するには、まずターミナルで以下のコマンドを実行し、go-funkライブラリをインストールします。
go get github.com/thoas/go-funk
後は、ソースコードでライブラリをインポートすれば使えるようになります。
package main
import (
"fmt"
"github.com/thoas/go-funk"
)
func main() {
numbers := []int{3, 4, 7, 11, 2, 8, 9, 5}
max := funk.MaxInt(numbers) // 最大値の取得
min := funk.MinInt(numbers) // 最小値の取得
fmt.Println(max) // => 11
fmt.Println(min) // => 2
}
go-funkには他にも便利な関数が色々あるので、詳しく知りたい方はこちらのドキュメントをご覧ください。