Как в GoLang проверить содержит ли массив значение?

Рейтинг: 0Ответов: 2Опубликовано: 30.06.2023

Изучаю GoLang, стало интересно как проверить есть ли значение в массиве.

Есть функция strings.Contains, но она проверяет есть ли строка в строке, не массив.

Есть ли функция для этого, или надо писать свою?

Ответы

▲ 0Принят

В модуле slices есть функция Contains:

found := slices.Contains(some_slice, some_value))

found будет true если some_value есть в some_slice, иначе false.

UPD: В GoLang 1.21 модуль slices стал встроенным.

▲ 1

Если массив не отсортирован, то есть функция 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