Есть ли в Go функция indexOf?
Иль придется искать нужный элемент через range и if внутри. Если нет, то какой быстрый вариант можно сделать (быстрый, в смысле по скорости).
Ответы (1 шт):
Автор решения: dikey0ficial
→ Ссылка
К сожалению, такая функция отсутствует. В таких случаях всё же используется for-range цикл с проверкой внутри. Пример:
package main
import "fmt"
func indexOf(arr []string, need string) int {
for ind, val := range arr {
if val == need {
return ind
}
}
return -1
}
func main() {
arr := []string{"foo", "bar"}
fmt.Println(indexOf(arr, "foo")) // Output: 0
fmt.Println(indexOf(arr, "qwe")) // Output: -1
}
Дженерики уже в бете версии Go 1.18 (UPD: Go 1.18 уже вышел), и поэтому можно сделать такую реализацию функции:
func indexOf[T any](arr []T, need T) int {
for ind, val := range arr {
if val == need {
return ind
}
}
return -1
}
и вызывать через indexOf[string]([]string{"qwe", "42"}, "123") или же без типа: indexOf([]string{"qwe", "42"}, "123")