我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

将一个golang的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的结构的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

php小编苹果将为您介绍如何将一个Golang的map转换成另一种map的结构。在开发过程中,有时我们需要对原有的map进行一些转换操作,以满足特定的需求。无论是数据类型的转换还是结构的重新组织,都可以通过一些简单的方法来实现。本文将为您详
将一个golang的map转换成另一种map的结构
2024-02-14

使用 unsafe.Pointer 直接将结构“point”转换为另一个结构是否安全?

在Go语言中,使用`unsafe.Pointer`可以直接将一个结构体转换为另一个结构体。然而,这种转换是否安全是一个值得讨论的问题。在使用`unsafe.Pointer`进行结构体转换时,必须非常小心,因为它可能导致内存访问错误或数据损坏
使用 unsafe.Pointer 直接将结构“point”转换为另一个结构是否安全?
2024-02-09

Go - 将一个结构映射到另一个结构的惯用方式

php小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了一种简洁而灵活的方法来实现这个目标。无论是在处理数据库查
Go - 将一个结构映射到另一个结构的惯用方式
2024-02-11

java 对象list使用stream根据某一个属性转换成map的几种方式

可以使用Java 8中的Stream API将List转换为Map,并根据某个属性作为键或值。以下是一些示例代码: 将List转换为Map,键为某个属性,值为对象本身 List personList = ... // 假设这是一个Perso
2023-08-17

在MySQL中,我们如何将一个值从一种数字系统转换为另一种数字系统中的值?

借助 MySQL CONV() 函数,可以将一种数字系统的值转换为另一种数字系统。语法CONV(N, from_base, to_base)这里,“N”是要转换的数字,“from_base”是该数字的当前基数,“to_base”是该数字必须
2023-10-22

如何将接口转换为它实现的另一个接口?

php小编草莓将为大家介绍如何将接口转换为它实现的另一个接口。在编程中,接口是一种定义了一组方法的抽象类型,而另一个接口则是实现了这些方法的具体类型。将接口转换为另一个接口可以帮助我们在不改变原有代码的情况下,扩展已有的功能。本文将详细讲解
如何将接口转换为它实现的另一个接口?
2024-02-13

linux如何将一个文本文件的格式从MSDOS转换成UNIX

将DOS文本文件转换为UNIX格式涉及更改换行符约定。可以使用sed、tr、awk、Perl或Python命令删除或替换CRLF序列,从而将文件转换为UNIX格式。在使用这些命令之前,请备份原始文件,并注意它们不适用于二进制文件。
linux如何将一个文本文件的格式从MSDOS转换成UNIX
2024-04-02

linux如何将一个文本文件的格式从UNIX转换成MSDOS

本文详细介绍了在Linux下将文本文件从UNIX格式转换成MSDOS格式的多种方法,包括使用tr、sed、perl、dos2unix和unix2dos命令,以及使用文本编辑器或在线文件转换网站。这些方法可以帮助用户在不同操作系统之间方便地交换文本文件。
linux如何将一个文本文件的格式从UNIX转换成MSDOS
2024-04-02

mysql如何将数据库中的所有表结构和数据导入到另一个库

目编程录一、问题描述二http://www.lsjlt.com、解决方案1.使用mysqldump命令备份数据库2.创建目标数据库3.导入数据 到目标数据库三、补充知识3.1 mysqldump命令介绍3.2 常用备份命令总结一、问题描述
mysql如何将数据库中的所有表结构和数据导入到另一个库
2024-10-11

利用java如何实现一个将中文转换成拼音的功能

利用java如何实现一个将中文转换成拼音的功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。所需jar:pinyin4j-2.5.0.jarpublic sta
2023-05-31

mysql 将数据库中的所有表结构和数据 导入到另一个库(亲测有效)

一、问题描述 在本地开发一个功能,需要结合具体数据测试代码是否正确,但服务器上的数据不可随便修改。此时则需要将服务器上某个数据库的表批量导入到本地、而后进行测试。将数据库db1中的所有表及数据(如table1、table2),批量导入到另一
mysql 将数据库中的所有表结构和数据 导入到另一个库(亲测有效)
2023-12-22

MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据(适用于部分树机构)

1.创建表的示例 CREATE TABLE tbl_name( id int(11) not null auto_increment, userName varchar(100) not null,
2023-08-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录