Maison  >  Article  >  développement back-end  >  Convertir une carte Golang en une autre structure de carte

Convertir une carte Golang en une autre structure de carte

PHPz
PHPzavant
2024-02-14 11:33:18887parcourir

Convertir une carte Golang en une autre structure de carte

Éditeur PHP Apple vous présentera comment convertir une carte Golang en une autre structure de carte. Au cours du processus de développement, nous devons parfois effectuer certaines opérations de conversion sur la carte originale pour répondre à des besoins spécifiques. Qu'il s'agisse d'une conversion de type de données ou d'une réorganisation structurelle, cela peut être réalisé grâce à quelques méthodes simples. Cet article analysera ce processus en détail pour vous, vous aidera à maîtriser rapidement cette technique et à améliorer l'efficacité du développement. Explorons ensemble ce processus de conversion intéressant !

Contenu de la question

J'ai besoin d'aide pour convertir cette carte d'entrée en carte de sortie. J'ai essayé d'utiliser switch/case et for sans succès. Merci beaucoup!

Entrez :

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",
                    },
                },
            }

Sortie

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

J'ai essayé d'utiliser le boîtier de commutation, les boucles et les cartes. Mais je n'ai pas de résultats pour les participants, je ne trouve pas comment faire correspondre chaque carte, clé et valeur. Merci beaucoup

Solution de contournement

J'aurais dû utiliser le code suivant pour gérer ce dont vous avez besoin :

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))
}

J'ai ajouté quelques commentaires dans le code juste pour séparer les différentes parties. Les deux premières parties servent uniquement à définir les variables d'entrée et de sortie.
Prenez ce qui se passe dans // conversion 开头的部分是成为函数的良好候选者,但我更愿意将其保留在 main 函数中以用于演示目的。让我回顾一下 loop :

  1. Vous définissez l'entrée de la input variable
  2. Si la clé porte le suffixe _model, il est pris en compte
  3. Vous définissez un tempmap 类型的本地范围映射[string]output qui contient le nombre correct d'éléments que nous souhaitons ajouter
  4. Vous étendez la variable v (c'est pourquoi nous traitons des mappages imbriqués)
  5. Pour chaque projet, vous devez ajouter une entrée à tempmap
  6. À la fin de la boucle imbriquée, ajoutez une entrée à la carte parent (output)

La dernière partie imprime simplement un joli json qui peut être facilement lu et inspecté.

Veuillez noter que ce code est simplifié juste pour montrer comment atteindre votre objectif, veuillez l'ajuster avant de passer en production.

S'il vous plaît, dites-moi si cela peut aider, merci !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer