如何在Perl Graph.pm模块中按id查找节点



我正在尝试使用Graph.pm模块,但我看到的所有示例都将简单的基本标量作为节点。我试图将三个不同类的实例作为图中的节点。考虑:

sub new {
my ($class,$node_name) = @_;
my $self = {
"name"  => $node_name,
# More fields
};
bless $self, $class;
return $self;
}

现在我可以做一些类似的事情:

$g->add_vertex(new DNode("/"));

其中DNode是三个类中一个的构造函数。但是我怎样才能找到那个节点呢?例如,我有:

$g->add_vertex(new DNode("/"));
$g->add_vertex(new DNode("/a"));
$g->add_vertex(new DNode("/a/b"));
my $node = $g->get_vertex("/a/b");

没有get_vertex。我认为add_vertex_by_id在这里会有所帮助:

$g->add_vertex_by_id(new DNode("/"),"/");
$g->add_vertex_by_id(new DNode("/a"),"/a");
$g->add_vertex_by_id(new DNode("/a/b"),"/a/b");

但没有get_vertex_by_id方法。如何查找?

您真正想要实现的目标还不是100%清楚。我可以试着解释一下你问过的事情(我是模块的当前维护者(。

Graph模块是关于事物以及事物之间的连接的。通常的方法,我认为在这里对你有效,是识别";事物;(顶点(通过字符串名称,例如"顶点"/"或"/a";,并且将属性(例如object(设置为Perl对象。相反,您可以使用refvertexed由实际的Perl对象标识顶点。

一旦你添加了一个顶点,就像这样:

$g = Graph->new;
$g->set_vertex_attribute('/a', object => $node_class->new('/a')); # no need to separately add vertex

你可以查一下:

$bool = $g->has_vertex('/a');
$obj = $g->get_vertex_attribute('/a', 'object'); # safely returns undef if no such vertex, or attribute not set

by_id方法是多边、多顶点、多图的一部分,其中有几个(或"多"(;方面";同一个顶点,每个顶点都有一个ID。我不认为这是你想要的。

如果这不能解决你的问题,你需要更多/更好地解释你的问题:-(

最新更新