РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
249 of 1593 menu

Функция slices.BinarySearchFunc

Функция slices.BinarySearchFunc выполняет бинарный поиск по пользовательской функции сравнения. Она предназначена для поиска элементов в отсортированном слайсе, когда необходимо использовать нестандартный критерий сравнения. Первый параметр — слайс для поиска, второй — целевое значение, третий — пользовательская функция сравнения, которая должна возвращать отрицательное, нулевое или положительное значение, аналогично cmp.Compare.

Функция возвращает два значения: индекс найденного элемента и булевый флаг, указывающий, найден ли элемент. Если элемент не найден, функция возвращает индекс, куда этот элемент мог бы быть вставлен для сохранения порядка, и false.

Синтаксис

slices.BinarySearchFunc(s, target, cmp)

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

Давайте найдем в слайсе строку, длина которой равна 4, используя пользовательскую функцию сравнения:

package main import ( "fmt" "slices" ) func main() { // Слайс отсортирован по длине строк s := []string{"a", "ab", "abc", "abcd", "abcde"} target := 4 index, found := slices.BinarySearchFunc(s, target, func(s string, target int) int { return len(s) - target }) fmt.Printf("index: %d, found: %t\n", index, found) }

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

"index: 3, found: true"

Пример с поиском по структуре

Давайте выполним поиск в слайсе структур по полю Age, используя пользовательскую функцию сравнения:

package 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}, {Name: "Dave", Age: 40}, } targetAge := 35 index, found := slices.BinarySearchFunc(people, targetAge, func(p Person, age int) int { return p.Age - age }) fmt.Printf("index: %d, found: %t\n", index, found) if found { fmt.Printf("person: %+v\n", people[index]) } }

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

"index: 2, found: true" "person: {Name:Charlie Age:35}"

Пример с элементом, отсутствующим в слайсе

Давайте выполним поиск значения, которого нет в слайсе, и посмотрим, какой индекс возвращается:

package main import ( "fmt" "slices" ) func main() { // Слайс отсортирован по значениям numbers := []int{10, 20, 30, 40, 50} target := 25 index, found := slices.BinarySearchFunc(numbers, target, func(num, target int) int { return num - target }) fmt.Printf("index: %d, found: %t\n", index, found) if !found { fmt.Printf("элемент должен быть вставлен на позицию %d\n", index) } }

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

"index: 2, found: false" "элемент должен быть вставлен на позицию 2"

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

  • функцию slices.BinarySearch,
    которая выполняет бинарный поиск со стандартной функцией сравнения
  • функцию slices.SortFunc,
    которая сортирует слайс по пользовательской функции сравнения
  • функцию slices.ContainsFunc,
    которая проверяет наличие элемента по условию
  • функцию slices.IndexFunc,
    которая возвращает индекс первого элемента, удовлетворяющего условию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить