Data structures 两个层次结构的单向同步

Data structures 两个层次结构的单向同步,data-structures,f#,merge,object-graph,Data Structures,F#,Merge,Object Graph,我希望写一个算法来同步两个层次结构。这些结构可以是对象图、存储在关系数据库表中的数据等(即使是两种不同的结构,只要它们具有可比较的键)。同步将是单向的,即一个结构将是原型,另一个将被修改以匹配 假设我们有一个sync函数。它需要接受以下内容: objA——原型 objB——要修改的对象 keyA——用于objA keyB——用于objB addB——创建objB的函数(返回新的objB的id) setB——更新objB的功能 remB——删除objB parB--objB父级的id--该id被传

我希望写一个算法来同步两个层次结构。这些结构可以是对象图、存储在关系数据库表中的数据等(即使是两种不同的结构,只要它们具有可比较的键)。同步将是单向的,即一个结构将是原型,另一个将被修改以匹配

假设我们有一个
sync
函数。它需要接受以下内容:

  • objA
    ——原型
  • objB
    ——要修改的对象
  • keyA
    ——用于
    objA
  • keyB
    ——用于
    objB
  • addB
    ——创建
    objB
    的函数(返回新的
    objB的id
  • setB
    ——更新objB的功能
  • remB
    ——删除
    objB
  • parB
    --
    objB
    父级的id--该id被传递给
    addB
    ,用于上下文
  • 因此,我们有:

    let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k)
             (addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit) 
             (parB:'p) = ...
    
    现在我有麻烦了<代码>'a和
    'b
    是分层的,因此函数需要知道它应该遍历
    'a
    'b
    的哪些属性(一旦它比较了它们的键并确定它们到目前为止是匹配的,应该进一步遍历)。对于这些“子”属性,它需要传递所有相同的参数以进行同步,但它们各自的类型除外

    这是一个明显的数据结构问题。如何将这些信息链接在一起,使根对象可以传递到
    sync
    ,并向下遍历图形?我最初的想法是将所有参数合并到一个类中,该类将有一个children属性(相同类型的
    ResizeArray
    )。但是,由于各种属性具有不同的类型,我无法找到一种方法使其工作,除了将类型抛出窗口并使用大部分或所有类型参数
    obj

    下面是我的问题:

  • 有没有一个行之有效的方法来做这件事(我还没有找到任何东西)
  • 我可以使用什么数据结构来封装实现此功能所需的数据

  • 我已经尽了最大的努力彻底解释了这一点,但如果有什么不清楚的地方,请询问,我会尽力提供更好的信息。

    我相信这是过于简单化了,但我的想法是这样的

    如果这是一个DAG,您可以对objA进行宽度优先遍历。当您从objA将节点排队时,请包含objB和您需要的任何其他信息(元组)。然后,当您退出队列时,您将修复objB


    您可以使用有区别的联合来处理排队中的不同子类型。

    从两个数据结构生成,并将转换映射到转换后的问题。

    这是一个有趣的想法。可能要一两天我才能试一下。我会回复你的。谢谢你的建议!这保留了最初的问题,即子节点的不同类型。我猜您需要一个中间数据结构,该算法将在该结构上工作,同样对于各种类型的数据,您需要将该数据转换为中间数据结构,运行algo,然后将其转换回原始数据形式