Как в GoLang проверить содержит ли массив значение?
Изучаю GoLang, стало интересно как проверить есть ли значение в массиве.
Есть функция strings.Contains, но она проверяет есть ли строка в строке, не массив.
Есть ли функция для этого, или надо писать свою?
Ответы (2 шт):
Автор решения: Pak Uula
→ Ссылка
Если массив не отсортирован, то есть функция slices.IndexFunc
// искать индекс элемента target
idx := slices.IndexFunc(someSlice, func (elt E) { return elt == target })
if idx >= 0 { /* найден */ }
Но это реально тривиальная функция:
func IndexFunc[E any](s []E, f func(E) bool) int {
for i := range s {
if f(s[i]) {
return i
}
}
return -1
}
Если же массив отсортирован, то есть функция поиска делением пополам slices.BinarySearch - ищет для типов, для которых определено сравнение <. В общем случае есть поиск по отсортированному слайсу с компаратором slices.BinarySearchFunc
Автор решения: nchistov
→ Ссылка
В модуле slices есть функция Contains:
found := slices.Contains(some_slice, some_value))
found будет true если some_value есть в some_slice, иначе false.