Heim  >  Artikel  >  Backend-Entwicklung  >  Konvertieren Sie eine Golang-Karte in eine andere Kartenstruktur

Konvertieren Sie eine Golang-Karte in eine andere Kartenstruktur

PHPz
PHPznach vorne
2024-02-14 11:33:18843Durchsuche

Konvertieren Sie eine Golang-Karte in eine andere Kartenstruktur

PHP-Editor Apple stellt Ihnen vor, wie Sie eine Golang-Karte in eine andere Kartenstruktur konvertieren. Während des Entwicklungsprozesses müssen wir manchmal einige Konvertierungsvorgänge an der Originalkarte durchführen, um bestimmte Anforderungen zu erfüllen. Unabhängig davon, ob es sich um eine Datentypkonvertierung oder eine strukturelle Neuorganisation handelt, kann dies mit einigen einfachen Methoden erreicht werden. Dieser Artikel analysiert diesen Prozess für Sie im Detail, hilft Ihnen, diese Technik schnell zu beherrschen und die Entwicklungseffizienz zu verbessern. Lassen Sie uns gemeinsam diesen interessanten Konvertierungsprozess erkunden!

Frageninhalt

Ich benötige Hilfe beim Konvertieren dieser Eingabekarte in eine Ausgabekarte. Ich habe versucht, switch/case und for zu verwenden, ohne Erfolg. Vielen Dank!

Geben Sie ein:

values{
                    "toto_voiture_brand": ad{
                        "citroen": "citroen",
                    },
                    "toto_voiture_model": ad{
                        "citroen_toto": "c3",
                    },
                    "toto_moto_brand": ad{
                        "kawasaki": "kawasaki",
                    },
                    "toto_moto_model": ad{
                        "kawasaki_tata": "ninja 1000 sx",
                    },
                    "toto_camion_brand": ad{
                        "renault": "renault",
                        "peugeot": "peugeot",
                    },
                    "toto_camion_model": ad{
                        "renault_toto":  "j5",
                        "peugeot_tata": "255",
                    },
                },
            }

Ausgabe

Values{
                "toto_voiture_model": {
                    "Citroen": {
                        {Value: "C3"},
                    },
                },
                "toto_moto_model": {
                    "Kawasaki": {
                        {Value: "Ninja 1000 SX"},
                    },
                },
                "toto_camion_model": {
                    "RENAULT": {
                        {Value: "J5"},
                    },
                    "PEUGEOT": {
                        {Value: "255"},
                    },
                },
            }

Ich habe versucht, Schaltergehäuse und Schleifen für und Karten zu verwenden. Aber ich habe nicht die Ergebnisteilnehmer und finde nicht, wie ich jede Karte, jeden Schlüssel und jeden Wert zuordnen kann. Vielen Dank

Workaround

Ich sollte den folgenden Code verwenden, um zu verwalten, was Sie brauchen:

package main

import (
    "encoding/json"
    "fmt"
    "strings"
)

type Output struct {
    Value string `json:"Value"`
}

func main() {
    // declare output
    output := make(map[string]map[string]Output, 0)
    // input
    input := make(map[string]map[string]string, 0)
    input["toto_voiture_brand"] = map[string]string{
        "CITROEN": "CITROEN",
    }
    input["toto_voiture_model"] = map[string]string{
        "CITROEN_toto": "C3",
    }
    input["toto_moto_model"] = map[string]string{
        "KAWASAKI_tata": "Ninja 1000 SX",
    }
    input["toto_camion_model"] = map[string]string{
        "RENAULT_toto": "J5",
        "PEUGEOT_tata": "255",
    }

    // transformation
    for k, v := range input {
        if strings.HasSuffix(k, "_model") {
            tempMap := make(map[string]Output, len(v))
            for kk, vv := range v {
                key := strings.Split(kk, "_")[0]
                tempMap[key] = Output{
                    Value: vv,
                }
            }
            output[k] = tempMap
        }
    }

    data, _ := json.MarshalIndent(&output, "", "\t")
    fmt.Println(string(data))
}

Ich habe dem Code einige Kommentare hinzugefügt, um die verschiedenen Teile zu trennen. Die ersten beiden Teile dienen lediglich der Definition von Ein- und Ausgabevariablen.
Nehmen Sie, was in // conversion 开头的部分是成为函数的良好候选者,但我更愿意将其保留在 main 函数中以用于演示目的。让我回顾一下 loop passiert:

  1. Sie bestimmen den Eingabebereich der inputVariablen
  2. Wenn der Schlüssel das Suffix _model hat, wird es berücksichtigt
  3. Sie definieren ein tempmap 类型的本地范围映射[string]output, das die richtige Anzahl an Elementen enthält, die wir hinzufügen möchten
  4. Sie bestimmen den Gültigkeitsbereich der v-Variablen (deshalb beschäftigen wir uns mit verschachtelten Zuordnungen)
  5. Für jedes Projekt müssen Sie einen Eintrag zu tempmap
  6. hinzufügen
  7. Fügen Sie am Ende der verschachtelten Schleife einen Eintrag zur übergeordneten Karte hinzu (output)

Der letzte Teil gibt nur einen schönen JSON-Code aus, der leicht gelesen und überprüft werden kann.

Bitte beachten Sie, dass dieser Code nur vereinfacht ist, um zu zeigen, wie Sie Ihr Ziel erreichen. Bitte passen Sie ihn an, bevor Sie in die Produktion gehen.

Bitte sagen Sie mir, ob das hilft, danke!

Das obige ist der detaillierte Inhalt vonKonvertieren Sie eine Golang-Karte in eine andere Kartenstruktur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen