Функция maps.EqualFunc

Функция maps.EqualFunc из пакета maps проверяет, имеют ли две карты одинаковый набор ключей и равные значения согласно предоставленной функции сравнения. Первым параметром она принимает первую карту для сравнения, вторым - вторую карту, а третьим - функцию, которая определяет, равны ли значения для заданного ключа.

Синтаксис

gomaps.EqualFunc(m1, m2, eq func(V, V) bool) bool

Пример

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

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  m1 := map[string]int{"a": 10, "b": 20}
  m2 := map[string]int{"a": 11, "b": 19}

  res := maps.EqualFunc(m1, m2, func(v1, v2 int) bool {
    return v1 == v2 || v1 == v2+1 || v1 == v2-1
  })

  fmt.Println(res)
}

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

gotrue

Пример

Рассмотрим случай, когда ключи совпадают, но значения не проходят проверку на равенство:

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  m1 := map[string]int{"x": 5, "y": 15}
  m2 := map[string]int{"x": 10, "y": 20}

  res := maps.EqualFunc(m1, m2, func(v1, v2 int) bool {
    return v1 == v2
  })

  fmt.Println(res)
}

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

gofalse

Пример

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

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  m1 := map[string]int{"a": 1, "b": 2}
  m2 := map[string]int{"a": 1, "c": 2}

  res := maps.EqualFunc(m1, m2, func(v1, v2 int) bool {
    return v1 == v2
  })

  fmt.Println(res)
}

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

gofalse

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

  • функцию maps.Equal,
    которая сравнивает карты на строгое равенство значений
  • функцию maps.Keys,
    которая возвращает слайс ключей карты
  • функцию maps.Values,
    которая возвращает слайс значений карты
  • функцию maps.DeleteFunc,
    которая удаляет элементы карты по условию