Sobes.tech
Senior

Hogyan hasonlítjuk össze a térképen lévő elemeket? Hogyan ellenőrizzük, hogy két térkép egyezik-e?

sobes.tech MI

Válasz az MI-től

Go nyelvben a térképek közvetlen összehasonlítása a == operátorral nem lehetséges, kivéve a nil-lel való összehasonlítást. Annak ellenőrzéséhez, hogy két térkép egyezik-e kulcsokban és értékekben, manuálisan kell összehasonlítani őket.

Példa egy függvényre, amely két map[string]int-t hasonlít össze:

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
}

A térkép belsejében lévő elemek összehasonlásához figyelembe kell venni az érték típusát. Ha az értékek összetett struktúrák, akkor rekurzív összehasonlítás vagy a reflect.DeepEqual csomag használata szükséges:

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
}

Ezért, két térkép egyezőségét az alábbi módon lehet ellenőrizni:

  1. Ellenőrizze a hosszúság egyezőségét.
  2. Minden kulcs esetében ellenőrizze a létezést és az értékek egyezőségét.

Ez egy univerzális megközelítés a térképek összehasonlítására Go nyelven.