将一个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
中发生的事情:
- 您对
input
变量的条目进行范围 - 如果密钥具有后缀
_model
,则将其考虑在内 - 您定义一个
tempmap
类型的本地范围映射[string]output,其中包含我们要添加的正确数量的元素 - 您对
v
变量进行范围调整(这就是我们处理嵌套映射的原因) - 对于每个项目,您都需要向
tempmap
添加一个条目 - 在嵌套循环的末尾,向父映射添加一个条目 (
output
)
最后一部分只是打印一个漂亮的 json,可以轻松阅读和检查。
请注意,此代码经过简化只是为了展示如何实现您的目标,请在投入生产之前对其进行调整。
请告诉我这是否有帮助,谢谢!
以上就是将一个golang的map转换成另一种map的结构的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341