Home  >  Article  >  Backend Development  >  Convert a golang map into another map structure

Convert a golang map into another map structure

PHPz
PHPzforward
2024-02-14 11:33:18885browse

Convert a golang map into another map structure

php editor Apple will introduce you how to convert a Golang map into another map structure. During the development process, sometimes we need to perform some conversion operations on the original map to meet specific needs. Whether it is data type conversion or structural reorganization, it can be achieved through some simple methods. This article will analyze this process in detail for you, help you quickly master this technique, and improve development efficiency. Let’s explore this interesting conversion process together!

Question content

I need help converting this input map to an output map. I tried using switch/case and for with no success. Thank you so much!

enter:

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

Output

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

I've tried using switch case and loops for and maps. But I don't have the result participants, I don't find how to match each map, key and value. Many thanks

Solution

I should use the following code to manage what you need:

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

I added some comments in the code just to separate the various parts. The first two parts are only used to define input and output variables.
The section starting with // conversion is a good candidate to be a function, but I prefer to keep it in the main function for demonstration purposes. Let me recap what happened in loop:

  1. You scope entries for input variables
  2. If the key has the suffix _model, it is taken into account
  3. You define a local scope map of type tempmap[string]output that contains the correct number of elements we want to add
  4. You scope the v variable (that's why we deal with nested mappings)
  5. For each project you need to add an entry to tempmap
  6. At the end of the nested loop, add an entry to the parent map (output)

The last part just prints a nice json that can be easily read and inspected.

Please note that this code is simplified just to show how to achieve your goal, please adjust it before putting it into production.

Please tell me if this helps, thank you!

The above is the detailed content of Convert a golang map into another map structure. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete