Go中图形结构的深度复制

Go中图形结构的深度复制,go,data-structures,Go,Data Structures,我有一些非常经典的节点: type MyNode struct { value string edges []*MyNode } 我使用这些节点来构建一个图。构建此图时,我使用函数在节点之间建立双向连接: func (node *MyNode) ConnectTo(otherNode *MyNode) *MyNode { node.edges = append(node.edges, othernode) otherNode.edges = append(oth

我有一些非常经典的节点:

type MyNode struct {
    value string
    edges []*MyNode
}
我使用这些节点来构建一个图。构建此图时,我使用函数在节点之间建立双向连接:

func (node *MyNode) ConnectTo(otherNode *MyNode) *MyNode {
    node.edges = append(node.edges, othernode)
    otherNode.edges = append(otherNode.edges, node)
    return otherNode
}
我想对图进行同构,这样我就可以对它执行操作,并将其作为自己的节点集返回。简单的复制构造函数、copy()甚至普通的深度复制方法都不会保留连接结构


我必须经历在新旧结构之间绘制地图的痛苦吗?或者说有什么很好的方法可以做到这一点吗?

没有。没有神奇的方法可以在Go中创建图的同构

Go内置函数和语言特性遵循的原则之一是,它们不会隐藏时间和空间方面的复杂性。创建同构超出了这个范围


使用地图的想法是正确的方法,我不会称之为痛苦。只需几行代码就可以完成。

不。没有神奇的方法可以在Go中创建图的同构

Go内置函数和语言特性遵循的原则之一是,它们不会隐藏时间和空间方面的复杂性。创建同构超出了这个范围


使用地图的想法是正确的方法,我不会称之为痛苦。只需几行代码就可以完成。

您能详细说明一下您尝试过但没有成功的地方吗?这个问题相当广泛,如果没有更具体的细节,可能很难回答。我想这里的问题是:“在围棋中有什么漂亮的方法可以做到这一点吗?”。图的同构意味着它保留与源图相同的连接结构。在尝试整合一种方法来实现这一点时,我在做了一个深度复制并意识到边缘连接是到源图形而不是新图形之后,很快就停止了。如果这还不清楚,请让我知道,我觉得这个问题相当直接。如果没有一个直接简洁的方法,这是一个非常好的答案。如果实现这一点,很可能没有一个非常简洁的方法。一般来说,go不会优先考虑聪明的解决方案。我猜想要实现这一点,你只需要写几个循环,以修改后的形式重新构建图形。你能详细说明一下你尝试了什么,没有成功吗?这个问题相当广泛,如果没有更具体的细节,可能很难回答。我想这里的问题是:“在围棋中有什么漂亮的方法可以做到这一点吗?”。图的同构意味着它保留与源图相同的连接结构。在尝试整合一种方法来实现这一点时,我在做了一个深度复制并意识到边缘连接是到源图形而不是新图形之后,很快就停止了。如果这还不清楚,请让我知道,我觉得这个问题相当直接。如果没有一个直接简洁的方法,这是一个非常好的答案。如果实现这一点,很可能没有一个非常简洁的方法。一般来说,go不会优先考虑聪明的解决方案。我猜想要实现这一点,您只需编写几个循环,以修改后的形式重建图形。