当前位置: 首页 > 面试题库 >

您如何在Go中执行结构的深层复制?

冉德元
2023-03-14
问题内容

我正在尝试执行以下结构的深层副本:

// Ternary Tree
type Tree struct {
    Left  *Tree
    Mid *Tree
    Right *Tree
    Value interface{}
    Parent *Tree
    Orientation string
    IsTerminal bool
    Type string
}

以下是对不起的尝试。看来我在根处创建了一棵新树,但是它的孩子仍然指向内存中的相同地址。

func (tree *Tree) CopyTree() *Tree {
    if (tree == nil) {
        return nil
    } else {
        copiedTree := &Tree {
            tree.Left.CopyTree(),
            tree.Mid.CopyTree(),
            tree.Right.CopyTree(),
            tree.Value,
            tree.Parent.CopyTree(),
            tree.Orientation,
            tree.IsTerminal,
            tree.Type}
        return copiedTree
    }
}

go中是否有任何有用的构造可帮助深度复制构造?如果没有,我将如何自己进行深层复制?请注意,“
Deepcopy
”软件包不再起作用,因为它使用了Go 1发行版中已弃用的一些功能


问题答案:

我离得很近。我应该已经将copyedTree分配给父属性。

func (tree *Tree) CopyTree() *Tree {
    if (tree == nil) {
        return nil
    } else {
        copiedTree := &Tree {
            tree.Left.CopyTree(),
            tree.Mid.CopyTree(),
            tree.Right.CopyTree(),
            tree.Value,
            nil,
            tree.Orientation,
            tree.IsTerminal,
            tree.Type,
        }

        if copiedTree.Left != nil {
            copiedTree.Left.Parent = copiedTree
        }
        if copiedTree.Right != nil {
            copiedTree.Right.Parent = copiedTree
        }
        if copiedTree.Mid != nil {
            copiedTree.Mid.Parent = copiedTree
        }
        return copiedTree
    }
}


 类似资料:
  • 我正在尝试执行以下结构的深度副本: 以下是我抱歉的尝试。看起来我在根部创建了一棵新树,但它的子树仍然指向内存中的相同地址。 在go中有什么有用的构造可以帮助深度复制一个结构吗?如果没有,我将如何执行这个深度复制自己?注意,“deepcopy”包不再工作,因为它使用了一些在Go1发行版中不推荐使用的函数

  • 问题内容: 在Objective-C中,可以通过以下方式进行深度复制: 如何在Swift中进行深度复制? 问题答案: 深拷贝 您的示例不是在StackOverflow上讨论的深层副本。获得对象的真实深层副本通常需要 迅速复制 该协议是提供对象副本的Objective- C方法,因为一切都是指针,并且您需要一种管理任意对象副本生成的方法。对于Swift中的任意对象副本,您可以提供一个便利的初始化程序

  • 问题内容: 我只是在数组上使用过,以为这是一个深复制。 如何执行阵列的深层复制? 我应该遍历它并执行一系列的操作吗? 问题答案: 是的,你应该遍历2D布尔数组以进行深复制。如果你使用的是Java 6,请同时查看方法。 我建议使用Java 6的下一个代码:

  • 问题内容: 您如何在Java中以及在何处定义自己的Exception层次结构? 我的主要问题涉及必须定义Exception类的包位置。 我们是否为异常创建一个特殊的程序包并将所有类放入其中? 问题答案: 我将此作为一般规则。 在适当的地方,使用预定义的Java异常。例如,如果您的代码有某种I / O错误,则抛出IOException是可以的。 仅当需要在try / catch块中区分两个异常时,才

  • 问题内容: 我对列表副本有一些问题: 所以之后我得到了E0来自,我做的副本E0通过调用。我猜这里是的较深的副本E0,我通过。但是在主要功能上。 为什么循环之前的结果与for循环之后的结果不同? 下面是我的代码: 问题答案: 不是深层副本。你不使用做出深层副本两者并很浅拷贝)。 你用于深度复制列表。 请参阅以下代码段 现在看deepcopy操作

  • 问题内容: 在Go中,如何在运行时根据对象的类型创建对象的实例?我想您还需要先获取对象的实际值吗? 我正在尝试执行惰性实例化以节省内存。 问题答案: 为了做到这一点,你需要。 您可以使用结构类型(而不是int)执行相同的操作。还是其他的,真的。只需确保了解map和slice类型时new和make之间的区别即可。