【Go】配列を検索する
GoではPHPのin_arrayみたいな一発で配列にあるかどうか判別する関数は存在しません。
なので普通に書いて実装していくことになります。
list := []int{0, 1, 2, 3} target := 1 for _, v := range list { if v == target { //一致したときの処理 } }
単純にfor~rangeで取り出して、ifで判定するという原始的な処理ですw
とはいえ、他の関数も内部的には配列の検索を行っていると思うし、そもそもGoはこれくらいの処理なら早いので問題はないかなと。
記述量が増えるというのはありますが、それはGoの他の箇所にも言える事なので、特別これだけの問題ではありません。
何度も呼び出すのなら、もうこれを関数化して呼び出すしかないですね。
そもそもforは十分に早いので、特に気にする事はありません。
ただrangeの注意点としては、渡される値がコピーなので、値を変更しても元のlistには反映されません。
やるならforで要素にアクセスするしかないかなと。
sliceとarrayの速度差
あまりGoでは使う事が少ないarrayですが、基本的に同じサイズなら差はありません。
が、arrayの場合、コピーすると値渡しになります。
そもそも巨大なarrayを作る事はないと思いますし(サイズが固定なので使いにくい)
Goはsliceメインなので困る事はないと思います。
ただsliceのappendは要素が多い場合時間がかかります。
普段使う機会が多いsliceの検索ですが、実は深い仕組みになっていたりするんですね。