gpt4 book ai didi

javascript - 在 Cytoscape.js 中查找 Node 之间的唯一对

转载 作者:太空宇宙 更新时间:2023-11-03 22:28:57 25 4
gpt4 key购买 nike

我正在使用Cytoscape.js 。我有一些与边连接的 Node 。

我想循环遍历两个 Node 之间的每个连接。问题是,在某些情况下,两个 Node 之间有多个边,所以我不能只说 cy.edges().forEach()因为这会导致循环遍历比需要的更多的边。

我能做的就是说类似的话

const alreadyVisited = [];

cy.edges().forEach(edge => {
const key1 = edge.source() + '-' + edge.target();
const key2 = edge.target() + '-' + edge.source();

if (alreadyVisited.indexOf(key1) === -1 && alreadyVisited.indexOf(key2)) {
// ...
alreadyVisited.push(key1);
alreadyVisited.push(key2);
}
})

但这似乎有点愚蠢。 Cytoscape有一些功能edges.parallelEdges() , nodes.connectedEdges() , eles.neighborhood()等等。难道不能利用其中的一些来解决我的问题吗?

同时拥有key1的原因和key2是因为我不知道如何确保边缘的方向无关紧要。

编辑

我也可以做类似的事情

cy.nodes().forEach(node1 => {
cy.nodes().forEach(node2 => {
if (node1 !== node2) {
// now I have each pair
}
});
});

但这不是一种愚蠢的方法吗,因为它们中的许多都没有边缘?如果我有两个 Node A 和 B,这种方法将给出 2 个关系(A -> B 和 B -> A)。

最佳答案

看一下遍历函数:http://js.cytoscape.org/#collection/traversing

例如,node.edgesWith(node2)给出 Node 之间的无向边,而node.edgesTo(node2)给出有向边。node.connectedEdges()`可以如果您想关注一个 Node 及其所有连接而不是一对特定的 Node ,那么您也会感兴趣。

元素的集合可以用作集合,因此如果您想跟踪事物,可以执行toTraverse = toTraverse.difference( justTraversed )

关于javascript - 在 Cytoscape.js 中查找 Node 之间的唯一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40701543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com