为了账号安全,请及时绑定邮箱和手机立即绑定

如何编辑隐藏在递归结构中的数组

如何编辑隐藏在递归结构中的数组

Go
梦里花落0921 2023-07-10 10:55:55
我有这个结构(注意它是递归的!):type Group struct {  Name string  Item []string  Groups []Group}我想将一个字符串附加到Item深埋在 Group 数组的层次结构中的数组中。关于这个新项目的路径,我所掌握的唯一信息是它所在组的名称。假设路径是“foo/bar/far”。我想修改 bar 而不覆盖 foo、bar 或“root”数组。基本上,我想编写一个函数,返回一个新的 Group 变量,该变量与原始变量相同,但附加了新字符串。到目前为止我已经尝试过以下方法:循环遍历包含路径的所有组名称的数组,如果它们位于当前组中,则将当前组变量设置为该新组。循环完成后,将字符串附加到数组并返回当前组。当然,唯一的问题是根组的其余部分被删除并替换为新的、修改过的组。代码:func in(item string, array []Group) (bool, int) {        for i, elem := range array {                if item == elem.Name {                        return true, i                } else {                        continue                }        }        return false, 0}func addItem(list Group, newItem string, path string) Group {        var currentGroup Group = list        if path == "" {                currentGroup.Items = append(currentGroup.Items, newItem)        } else {                for _, elem := range strings.Split(path, "/") {                        in, index := in(elem, currentGroup.Groups)                        if in {                                currentGroup = currentGroup.Groups[index]                        }                }                currentGroup.Items = append(currentGroup.Items, newItem)        }        return currentGroup}
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

我想您可以将组作为指针传递给 addItem 函数,并忽略该函数的返回值


有一点像


func addItem(list *Group, newItem string, path string) Group {

    var currentGroup *Group = list

    if path == "" {

        currentGroup.Item = append(currentGroup.Item, newItem)

    } else {

        for _, elem := range strings.Split(path, "/") {

            in, index := in(elem, currentGroup.Groups)

            if in {

                currentGroup = &currentGroup.Groups[index]

            }

        }

        currentGroup.Item = append(currentGroup.Item, newItem)

    }


    return *currentGroup

}

查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信