提问人:1zz0 提问时间:11/4/2023 最后编辑:1zz0 更新时间:11/5/2023 访问量:33
按正确的顺序对图形的节点进行排序
Sort Nodes for a graph in the correct order
问:
我正在处理一个图形,并且很难以正确的顺序正确排序/呈现图形节点。
对于逻辑,我在 Angular 应用程序中使用 Typescript。
我有一个带有链接的数组,其中为每个数据集指定了源节点和目标节点。
linksArray = [{source: 'NodeId1', target: 'NodeId3'}, {source: 'NodeId1', target: 'NodeId6'}, {source: 'NodeId6', target: 'NodeId2'}, {source: 'NodeId8', target: 'NodeId10'}...]
现在我想迭代这个数组,并以正确的顺序为每个条目调用“graph.add(node)”。
算法如下所示:
- 取第一个源节点和目标节点,并直接将它们都添加到图中(第一个条目(linksArray[0])始终是第一个节点。我可以肯定这一点。
- 检查数组以查看目标节点是否再次作为源节点出现。接下来添加上一个源的目标节点 - REPEAT等。
- 目标是以正确的节点顺序呈现图形,并彼此相邻。
否则,某些节点将相距很远。这是不可读的。
也许我的想法错了,这要简单得多。
提前致谢。
答:
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正则表达式
评论