按正确的顺序对图形的节点进行排序

Sort Nodes for a graph in the correct order

提问人:1zz0 提问时间:11/4/2023 最后编辑:1zz0 更新时间:11/5/2023 访问量:33

问:

我正在处理一个图形,并且很难以正确的顺序正确排序/呈现图形节点。

对于逻辑,我在 Angular 应用程序中使用 Typescript。

我有一个带有链接的数组,其中为每个数据集指定了源节点和目标节点。

linksArray = [{source: 'NodeId1', target: 'NodeId3'}, {source: 'NodeId1', target: 'NodeId6'}, {source: 'NodeId6', target: 'NodeId2'}, {source: 'NodeId8', target: 'NodeId10'}...]

现在我想迭代这个数组,并以正确的顺序为每个条目调用“graph.add(node)”。

算法如下所示:

  1. 取第一个源节点和目标节点,并直接将它们都添加到图中(第一个条目(linksArray[0])始终是第一个节点。我可以肯定这一点。
  2. 检查数组以查看目标节点是否再次作为源节点出现。接下来添加上一个源的目标节点 - REPEAT等。
  3. 目标是以正确的节点顺序呈现图形,并彼此相邻。

否则,某些节点将相距很远。这是不可读的。

也许我的想法错了,这要简单得多。

提前致谢。

Angular TypeScript 逻辑

评论


答:

1赞 1zz0 11/5/2023 #1

我自己解决了。

NodesArray 包含各个节点,这些节点按呈现的正确顺序排列。

  let nodesArray: any[] = [];

  let nodeLinks = [{source: 'NodeId1', target: 'NodeId3'}, {source: 'NodeId1', target: 'NodeId6'}, {source: 'NodeId6', target: 'NodeId2'}, {source: 'NodeId8', target: 'NodeId10'}];

  let tempTargetNode: string;
 
  // Sort Nodes

  nodeLinks.forEach((firstLevelLink: { source: any; target: any }, index: number) => {

    if (index === 0) {

      nodesArray.push({ id: firstLevelLink.source, name: firstLevelLink.source });

      nodesArray.push({ id: firstLevelLink.target, name: firstLevelLink.target });

      tempTargetNode = firstLevelLink.target;

    } else {

      nodeLinks.forEach((secondLevelNodeLink: { source: any; target: any }, index: number) => {

        if (tempTargetNode === secondLevelNodeLink.source) {

          nodesArray.push({ id: secondLevelNodeLink.target, name: secondLevelNodeLink.target });

          tempTargetNode = secondLevelNodeLink.target;

        }

      });

    }

  });

 

上一个:编程逻辑

下一个:MSSQL正则表达式