Convert a golang map into another map structure

PHPz
Release: 2024-02-14 11:33:18
forward
887 people have browsed it

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",
                    },
                },
            }
Copy after login

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"},
                    },
                },
            }
Copy after login

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))
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template