1

如果我想通过 id 顶点获取名称,我可以使用这个函数:VAS(g, "name",id) 但是如果我想要相反的方式,通过名称获取 id,我该怎么做?

4

2 回答 2

1

igraph 本身并没有提供按名称查找顶点的方法,并且有充分的理由 - 从名称到 ID 的映射比从 ID 到名称的映射更具挑战性,后者是一个简单的数组查找操作。您可以遍历所有顶点并在匹配的顶点处停止,但这对于大型图(顶点数为 O(n))效率低下。一种更快的方法是使用某种关联数组数据结构,例如dict@Jasc 的答案,并使用名称作为键和 ID 作为值。(如果你改变它,你需要保持这个索引与图表同步。)C,它自己,或者标准 C 库不提供这样的数据结构,但是有很多实现可用,例如找到的GHash 结构在油嘴滑舌的。

于 2012-05-07T21:25:39.937 回答
0

我在 igrah 网站或邮件列表中找到了以下内容。

g = igraph.Graph(0, directed=True)
g.add_vertices(2)
g.vs[0]["name"] = "Bob"
g.vs[1]["name"] = "Bill"
# build a dict for all vertices to lookup ids by name
name2id = dict((v, k) for k, v in enumerate(g.vs["name"]))
# access specific vertices like this:
id_bob = name2id["Bob"]
print(g.vs[id_bob]["name"])
于 2012-05-07T20:44:13.153 回答