Sobes.tech
Senior

How to compare elements in a map? How to check if two maps match?

sobes.tech AI

Answer from AI

In Go, comparing maps directly with the == operator is impossible, except for comparison with nil. To check if two maps are identical in keys and values, you need to compare them manually.

Example function for comparing two map[string]int:

func mapsEqual(a, b map[string]int) bool {
    if len(a) != len(b) {
        return false
    }
    for k, v := range a {
        if bv, ok := b[k]; !ok || bv != v {
            return false
        }
    }
    return true
}

To compare elements inside a map, you need to consider the type of values. If the values are complex structures, recursive comparison or using the reflect.DeepEqual package might be necessary:

import "reflect"

func mapsEqualGeneric(a, b map[string]interface{}) bool {
    if len(a) != len(b) {
        return false
    }
    for k, v := range a {
        bv, ok := b[k]
        if !ok || !reflect.DeepEqual(v, bv) {
            return false
        }
    }
    return true
}

Thus, to check if two maps are equal, you should:

  1. Check if their lengths are equal.
  2. For each key, verify its presence and that the values are equal.

This is a universal approach for comparing maps in Go.

How to compare elements in a map? How to check if two… - sobes.tech