😕

Golangで配列からMaxの値を取得する方法を考える

2021/01/24に公開

<概要>

配列(リスト)の中の最大値・最小値を求めるには (max, min)の記事にある通り、プログラミング言語によって配列の中の最大値を取得できるメソッドが用意されてあるものもあれば、無いものもあります。Golangについては標準では用意されていません。愚直に書けば良いと言われればそれまでなのですが、せっかくなのでライブラリとかを使ってMax値を取得できないものかと調べてみたので、書いてみます。

<方法>

1. 愚直にループを回す

ライブラリを使わずに愚直にfor文を回すやり方です。特にこの方法でも全く問題ないとは思います。

sampleArray := []int{1, 6, 2, 10, 9, 14, 100, 5}
// 愚直にループを回す
max := -9999999
for _, s := range sampleArray {
	if max < s {
		max = s
	}
}
fmt.Println(max)

2. go-imathのライブラリを使う

go-imathというライブラリに、MaxSliceが用意されていて、このメソッドを使うことで最大値を取得できます。Max値を取るためだけにライブラリまで入れなくても良いとは思いますが、go-imathには最小公倍数を取得するメソッド、フィボナッチ数列のindexを取得するメソッドなど用意されていて、数字を扱う場合は入れても良いかなと思います。

sampleArray := []int{1, 6, 2, 10, 9, 14, 100, 5}
max := ix.MaxSlice(sampleArray)
fmt.Println(max)

3. go-funkのライブラリを使う

go-funkの詳細についてはGolangのSliceでFilterやMap的なことをやりたいに書かれている通り、sliceに対してmap関数やfilter関数を適用できるライブラリです。go-funkにはドキュメントにある通り、Max値を取得する関数も用意されています。Max値を取るためだけの用途でライブラリを入れるほどではないと思いますが、map関数やfilter関数も合わせて使いたい場合は入れても良いかなと感じます。

sampleArray := []int{1, 6, 2, 10, 9, 14, 100, 5}
max = funk.MaxInt(sampleArray).(int)
fmt.Println(max)

Discussion