Функция slices.IndexFunc

Функция slices.IndexFunc возвращает индекс первого элемента в слайсе, для которого переданная функция-предикат возвращает true. Если ни один элемент не подходит, функция возвращает -1. В первый аргумент передается слайс для поиска, во второй аргумент — функция, которая принимает элемент слайса и возвращает bool. Функция из пакета slices доступна начиная с версии Go 1.21.

Синтаксис

goslices.IndexFunc(slice, func(elem T) bool)

Пример с поиском строки по длине

Найдем индекс первого элемента в слайсе строк, длина которого больше 1:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  slice := []string{"a", "b", "cd", "efg"}
  index := slices.IndexFunc(slice, func(s string) bool {
    return len(s) > 1
  })
  fmt.Println(index)
}

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

go2

Пример с поиском числа по условию

Найдем индекс первого числа, которое делится на 3 без остатка:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  numbers := []int{1, 2, 4, 6, 9}
  index := slices.IndexFunc(numbers, func(n int) bool {
    return n%3 == 0
  })
  fmt.Println(index)
}

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

go3

Пример с отсутствием подходящего элемента

Если в слайсе нет элемента, удовлетворяющего условию, функция возвращает -1:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  slice := []string{"a", "b", "c"}
  index := slices.IndexFunc(slice, func(s string) bool {
    return s == "d"
  })
  fmt.Println(index)
}

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

go-1

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

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