返回顶部
首页 > 资讯 > 后端开发 > GO >将一个golang的map转换成另一种map的结构
  • 532
分享到

将一个golang的map转换成另一种map的结构

2024-02-14 11:02:01 532人浏览 八月长安
摘要

PHP小编苹果将为您介绍如何将一个golang的map转换成另一种map的结构。在开发过程中,有时我们需要对原有的map进行一些转换操作,以满足特定的需求。无论是数据类型的转换还是结构

PHP小编苹果将为您介绍如何将一个golang的map转换成另一种map的结构。在开发过程中,有时我们需要对原有的map进行一些转换操作,以满足特定的需求。无论是数据类型的转换还是结构的重新组织,都可以通过一些简单的方法来实现。本文将为您详细解析这个过程,帮助您快速掌握该技巧,提升开发效率。让我们一起来探索这个有趣的转换过程吧!

问题内容

我需要帮助将此输入映射转换为输出映射。我尝试使用 switch/case 和 for 但没有成功。非常感谢!

输入:

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

输出

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

我尝试过使用 switch case 和循环 for 和地图。但我没有结果参加者,我没有找到如何匹配每个地图、键和值。非常感谢

解决方法

我应该使用以下代码来管理您所需要的内容:

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

我在代码中添加了一些注释,只是为了分隔各个部分。前两部分仅用于定义输入和输出变量。
// conversion 开头的部分是成为函数的良好候选者,但我更愿意将其保留在 main 函数中以用于演示目的。让我回顾一下 loop 中发生的事情:

  1. 您对 input 变量的条目进行范围
  2. 如果密钥具有后缀 _model,则将其考虑在内
  3. 您定义一个 tempmap 类型的本地范围映射[string]output,其中包含我们要添加的正确数量的元素
  4. 您对 v 变量进行范围调整(这就是我们处理嵌套映射的原因)
  5. 对于每个项目,您都需要向 tempmap 添加一个条目
  6. 在嵌套循环的末尾,向父映射添加一个条目 (output)

最后一部分只是打印一个漂亮的 json,可以轻松阅读和检查。

请注意,此代码经过简化只是为了展示如何实现您的目标,请在投入生产之前对其进行调整。

请告诉我这是否有帮助,谢谢!

以上就是将一个Golang的map转换成另一种map的结构的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 将一个golang的map转换成另一种map的结构

本文链接: https://www.lsjlt.com/news/564396.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作