Функция slices.ContainsFunc

Функция slices.ContainsFunc проверяет, содержится ли в слайсе элемент, удовлетворяющий условию, заданному в функции обратного вызова. Она возвращает true, если хотя бы один элемент соответствует условию, и false в противном случае. Первым параметром функция принимает слайс для поиска, вторым - функцию предикат, которая возвращает true для подходящего элемента.

Синтаксис

goslices.ContainsFunc(slice, func)

Базовый пример с числами

Давайте проверим, содержит ли слайс чисел положительное число:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  numbers := []int{-5, -3, 0, 2, 7}
  res := slices.ContainsFunc(numbers, func(n int) bool {
    return n > 0
  })
  fmt.Println(res)
}

Результат выполнения кода:

gotrue

Поиск по строковому условию

Проверим, содержит ли слайс строк строку, начинающуюся с определенной буквы:

gopackage main

import (
  "fmt"
  "slices"
  "strings"
)

func main() {
  words := []string{"apple", "banana", "cherry", "date"}
  res := slices.ContainsFunc(words, func(s string) bool {
    return strings.HasPrefix(s, "b")
  })
  fmt.Println(res)
}

Результат выполнения кода:

gotrue

Поиск с пользовательским типом

Проверим, есть ли в слайсе структур человек с возрастом больше определенного значения:

gopackage main

import (
  "fmt"
  "slices"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  people := []Person{
    {Name: "Alice", Age: 25},
    {Name: "Bob", Age: 30},
    {Name: "Charlie", Age: 35},
  }
  res := slices.ContainsFunc(people, func(p Person) bool {
    return p.Age > 30
  })
  fmt.Println(res)
}

Результат выполнения кода:

gotrue

Случай, когда элемент не найден

Проверим, содержит ли слайс чисел число, кратное 10:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  numbers := []int{3, 7, 12, 25, 33}
  res := slices.ContainsFunc(numbers, func(n int) bool {
    return n%10 == 0
  })
  fmt.Println(res)
}

Результат выполнения кода:

gofalse

Проверка на пустой слайс

Посмотрим, что вернет функция для пустого слайса:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  var numbers []int
  res := slices.ContainsFunc(numbers, func(n int) bool {
    return n > 0
  })
  fmt.Println(res)
}

Результат выполнения кода:

gofalse

Смотрите также

  • функцию slices.Contains,
    которая проверяет наличие конкретного элемента в слайсе
  • функцию slices.IndexFunc,
    которая возвращает индекс первого элемента, удовлетворяющего условию
  • функцию slices.DeleteFunc,
    которая удаляет все элементы, удовлетворяющие условию
  • функцию slices.EqualFunc,
    которая сравнивает слайсы с использованием пользовательской функции