Функция slices.MaxFunc

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

Синтаксис

goslices.MaxFunc(slice, func(a, b T) int)

Пример с числами

Давайте найдем максимальное число в слайсе чисел:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  nums := []int{5, 2, 8, 1, 9, 3}
  res := slices.MaxFunc(nums, func(a, b int) int {
    return a - b
  })
  fmt.Println(res)
}

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

go9

Пример со строками

Найдем самую длинную строку в слайсе строк:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  words := []string{"a", "abc", "ab", "abcd", "b"}
  res := slices.MaxFunc(words, func(a, b string) int {
    return len(a) - len(b)
  })
  fmt.Println(res)
}

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

go"abcd"

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

Найдем пользователя с максимальным возрастом в слайсе структур:

gopackage main

import (
  "fmt"
  "slices"
)

type User struct {
  Name string
  Age  int
}

func main() {
  users := []User{
    {"Alice", 25},
    {"Bob", 30},
    {"Charlie", 28},
  }
  res := slices.MaxFunc(users, func(a, b User) int {
    return a.Age - b.Age
  })
  fmt.Println(res)
}

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

go{Bob 30}

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

  • функцию slices.Max,
    которая находит максимальный элемент без пользовательской функции
  • функцию slices.MinFunc,
    которая находит минимальный элемент по пользовательской функции
  • функцию slices.SortFunc,
    которая сортирует слайс по пользовательской функции
  • функцию slices.IsSortedFunc,
    которая проверяет отсортирован ли слайс по пользовательской функции