Heim > Backend-Entwicklung > Golang > Wie kann ich in Go effizient Schlüssel aus Karten abrufen?

Wie kann ich in Go effizient Schlüssel aus Karten abrufen?

Susan Sarandon
Freigeben: 2024-12-07 04:18:12
Original
485 Leute haben es durchsucht

How to Efficiently Retrieve Keys from Maps in Go?

So erhalten Sie Kartenschlüssel in Go

Mit dem starken Typisierungssystem von Go kann eine Funktion, die eine Karte mit Schlüsseln vom Typ interface{} übernimmt, nicht auf eine Karte angewendet werden mit Schlüsseln vom Typ int. Während Go derzeit keine Generika unterstützt, können wir eine generische Schlüsselfunktion auf verschiedene Arten implementieren:

Option 1: Kartentyp konvertieren

Wenn wir den Typ der Karte beibehalten möchten, können wir dies tun Ändern Sie die Keys-Funktion, um ein Map[int]interface{}-Argument zu verwenden und die Schlüssel explizit in interface{} umzuwandeln:

func Keys(m map[int]interface{}) []interface{} {
    keys := make([]interface{}, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}
Nach dem Login kopieren

Option 2: Verwenden Reflection

Alternativ können wir das Reflection-Paket von Go verwenden, um auf die Schlüssel der Karte zuzugreifen und sie in interface{} umzuwandeln. Dieser Ansatz kann jedoch Auswirkungen auf die Leistung haben:

func Keys(m interface{}) []interface{} {
    t := reflect.TypeOf(m)
    if t.Kind() != reflect.Map {
        panic("argument must be a map")
    }
    keys := make([]interface{}, 0)
    for _, key := range reflect.ValueOf(m).MapKeys() {
        keys = append(keys, key.Interface())
    }
    return keys
}
Nach dem Login kopieren

Option 3: Definieren einer generischen Hilfsfunktion

Um potenzielle Leistungsprobleme zu vermeiden, können wir eine generische Hilfsfunktion definieren, die eine Karte konvertiert[ int]interface{} zu einer Map[interface{}]interface{}:

func convertMap[K1 comparable, V1 any, K2 comparable, V2 any](m map[K1]V1) map[K2]V2 {
    ret := make(map[K2]V2, len(m))
    for k, v := range m {
        ret[k.(K2)] = v.(V2)
    }
    return ret
}

// Keys returns the keys of the provided map.
func Keys[K comparable, V any](m map[K]V) []K {
    keys := make([]K, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}
Nach dem Login kopieren

Mit diesen Hilfsfunktionen können wir Folgendes verwenden Code:

m2 := map[int]interface{}{
    2: "string",
    3: "int",
}
convertedMap := convertMap(m2)
result := Keys(convertedMap)
fmt.Println(result)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich in Go effizient Schlüssel aus Karten abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage