获取子图中的边
Get edges inside a sub-graph
我没有找到一种简单的方法来获取子图的边,即连接节点集合的边。
我能做的最好的就是计算连接边减去出边:
function getInsideEdges(nodes) {
var connectedEdges = nodes.connectedEdges();
var complement = nodes.absoluteComplement();
var outgoingEdges = nodes.edgesWith(complement);
var insideEdges = connectedEdges.difference(outgoingEdges);
return insideEdges;
}
这看起来真的很尴尬,考虑到很多其他操作都被 API 简化了。我错过了什么?
编辑:我尝试的第一个解决方案不起作用:nodes.edgesWith(nodes)
return 与 nodes.connectedEdges()
.
相同的设置
var cy = cytoscape({headless:true,elements:{
nodes:[
{data:{id:'n1'}},
{data:{id:'n2'}},
{data:{id:'n3'}}
],
edges:[
{data:{id:'e1-2',source:'n1',target:'n2'}},
{data:{id:'e1-3',source:'n1',target:'n3'}},
{data:{id:'e2-3',source:'n2',target:'n3'}}
]
}});
var nodes = cy.nodes();
var subgraphNodes = cy.$('#n1,#n2');
// we want to obtain the edges inside that subgraph: the collection ['e1-2']
subgraphNodes.connectedEdges().size();
// -> 3
subgraphNodes.edgesWith(subgraphNodes).size();
// -> 3
subgraphNodes.connectedEdges().difference(subgraphNodes.edgesWith(subgraphNodes.absoluteComplement())).size();
// -> 1
// another solution
subgraphNodes.outgoers('edge').intersection(subgraphNodes.incomers('edge')).size();
// -> 1
编辑:@maxkfranz 修复了 cytoscape.js 以便 subgraphNodes.edgesWith( subgraphNodes )
现在可以正确地 return 解决方案。
subgraphNodes.edgesWith( subgraphNodes )
——因为你想要边在子图内部(即连接到节点)
我没有找到一种简单的方法来获取子图的边,即连接节点集合的边。
我能做的最好的就是计算连接边减去出边:
function getInsideEdges(nodes) {
var connectedEdges = nodes.connectedEdges();
var complement = nodes.absoluteComplement();
var outgoingEdges = nodes.edgesWith(complement);
var insideEdges = connectedEdges.difference(outgoingEdges);
return insideEdges;
}
这看起来真的很尴尬,考虑到很多其他操作都被 API 简化了。我错过了什么?
编辑:我尝试的第一个解决方案不起作用:nodes.edgesWith(nodes)
return 与 nodes.connectedEdges()
.
var cy = cytoscape({headless:true,elements:{
nodes:[
{data:{id:'n1'}},
{data:{id:'n2'}},
{data:{id:'n3'}}
],
edges:[
{data:{id:'e1-2',source:'n1',target:'n2'}},
{data:{id:'e1-3',source:'n1',target:'n3'}},
{data:{id:'e2-3',source:'n2',target:'n3'}}
]
}});
var nodes = cy.nodes();
var subgraphNodes = cy.$('#n1,#n2');
// we want to obtain the edges inside that subgraph: the collection ['e1-2']
subgraphNodes.connectedEdges().size();
// -> 3
subgraphNodes.edgesWith(subgraphNodes).size();
// -> 3
subgraphNodes.connectedEdges().difference(subgraphNodes.edgesWith(subgraphNodes.absoluteComplement())).size();
// -> 1
// another solution
subgraphNodes.outgoers('edge').intersection(subgraphNodes.incomers('edge')).size();
// -> 1
编辑:@maxkfranz 修复了 cytoscape.js 以便 subgraphNodes.edgesWith( subgraphNodes )
现在可以正确地 return 解决方案。
subgraphNodes.edgesWith( subgraphNodes )
——因为你想要边在子图内部(即连接到节点)