获取子图中的边

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 )——因为你想要边在子图内部(即连接到节点)