gpt4 book ai didi

dictionary - 根据键数组和值构建任意深度的嵌套 map

转载 作者:行者123 更新时间:2023-12-01 22:34:52 27 4
gpt4 key购买 nike

我希望能够编写GoLang函数以获取键和值的数组(即keys={"a", "b", "c"}, value=123),然后构建嵌套 map 的数据结构,其中数组中的位置索引对应于嵌套 map 中的深度,并将值分配给最后一个键。例如,鉴于上述键和值,我想构建以下字典结构

 {"a":{"b":{"c":123}}}

以下是我目前拥有的代码。问题在于生成的 map 如下
{"a":{}, "b":{}, "c":123}.

任何有关我应如何修改此/为什么发生的建议都将不胜感激。
import (
"fmt"
)

type dict map[interface{}]interface{}

func main() {
vals := []interface{}{"a", "b", "c"}
// create a dictionary
d := make(dict)
d.Set(vals, 123)
// print it
fmt.Println(d)
}

func (d dict) Set(keys []interface{}, value interface{}) {
d2 := d
fmt.Println("Initial dict: ", d2)
keylen := len(keys)-1
for _, key := range keys[:keylen] {
// if key exists, recurse into that part of the dict
if entry, ok := d2[key]; ok {
d2 := entry
fmt.Println("Entered level in dict: ", d2)
} else {
d3 := make(dict)
d2[key] = d3
d2 := d3
fmt.Println("Created new level in dict: ", d2)
}
}
d2[keys[keylen]] = value
fmt.Println("Final dict: ", d2)
}

最佳答案

您似乎使解决方案过于复杂。此递归算法应执行以下操作:

func set(d dict,keys []interface{}, value interface{}) {
if len(keys)==1 {
d[keys[0]]=value
return
}
v, ok:=d[keys[0]]
if !ok {
v=dict{}
d[keys[0]]=v
}
set(v.(dict),keys[1:],value)
}

您必须添加代码来处理重置值的情况(即v。(dict)类型断言可能失败)。否则,您可以递归下降 map ,并同时使用键。

关于dictionary - 根据键数组和值构建任意深度的嵌套 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59972501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com