Golangでスライス(配列)に要素があるか確かめる方法
Golangには、スライスに対して要素を持っているか確かめるためのピンポイントなメソッドがありません。
なので、主に以下の方法で要素を含んでいるかを確かめます。
- 要素数を取得して0かどうかを確かめる
- nilチェック
それぞれ順に解説しますね。
ちなみに、map(連想配列)に対して、要素を含んでいるかを確かめる方法はこちらの記事で詳しく解説してます。
要素数を取得して0かどうかを確かめる
Golangのlen()関数を使用することで、スライス(配列)の要素数を取得することができます。
そのため、len()関数の結果が0であれば、そのスライス(配列)は要素を持たないことになりますね。
package main
import "fmt"
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{}
var slice3 []int
// 出力
fmt.Println(slice1) // [1, 2, 3]
fmt.Println(slice2) // []
fmt.Println(slice3) // []
// 要素数チェック
fmt.Println(len(slice1)) // 3
fmt.Println(len(slice2)) // 0
fmt.Println(len(slice3)) // 0
}
上記のコード例だと、slice2とslice3は要素数が0なので、要素が存在しないことが分かりますね。
スライス(配列)に対してnilチェックする
スライスに対して == nil をすることで、そのスライスがnilであるかを確かめることができます。
その結果、trueとなれば、そのスライスに要素が存在しないことが分かります。
package main
import "fmt"
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{}
var slice3 []int
// 出力
fmt.Println(slice1) // [1, 2, 3]
fmt.Println(slice2) // []
fmt.Println(slice3) // []
// nilチェック
fmt.Println(slice1 == nil) // false
fmt.Println(slice2 == nil) // false
fmt.Println(slice3 == nil) // true
}
ただ、nilチェックには注意すべき点もあります。
スライスの宣言をしただけだとtrueが返ってきますが、初期化して空のスライスを代入している場合はfalseが返ってきます。
上記のコードだと、slice2は要素を含んでいないのにも関わらず、falseを返すことが分かりますね。
そのため、スライスに要素が存在するかどうかを正確に調べたい場合は、len()関数で要素数を取得する方法を選択した方が良いでしょう。