所以我使用networkX图表来表示一些信息。此信息由不同的对象类型表示(例如,ColorNode和ShapeNode)。
在此图表上执行的某些处理要求我提取特定类型的节点。每次我需要这样做时,我都会按照下面的代码行事。
colornodes = []
for node in graph.nodes():
if isinstance(node, ColorNode):
colornodes.append()
虽然这有效,但我觉得这种情况在使用图表时会经常出现,我正在那里重新发明轮子。 基本上,我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:5)
我建议采用另一种方法,而不是定义自己的类型并始终使用(select substr(columnA, 4, instr(columnA,',')-1) col from table1
minus
select substr(columnB, 4, instr(columnB,',')-1) col from table2
)
union all
(select substr(columnB, 4, instr(columnB,',')-1) col from table2
minus
select substr(columnA, 4, instr(columnA,',')-1) col from table1
)
进行检查(速度很慢)。
您可以查看此answer进行经典节点/边缘过滤。
但是我找到了另一个技巧,这可能会对你的具体情况有用。
如果定义表示节点类型的属性,则可以使用查询具有该特定属性的节点
内置string start = monthCalendar1.SelectionRange.Start.ToShortDateString();
string end = monthCalendar1.SelectionRange.End.ToShortDateString();
DateTime startDay = Convert.ToDateTime(start);
DateTime endDay = Convert.ToDateTime(end);
_startDate = startDay;
_endDate = endDay;
var VacationDate = _startDate.ToShortDateString();
do
{
VacationDate = _startDate.ToShortDateString();
command.Parameters.AddWithValue("vDate", VacationDate);
command.CommandText = "insert into " + user + " (Date) values (@vDate)";
command.Connection = con;
command.ExecuteNonQuery();
string query = "select * from " + user;
command.CommandText = query;
OleDbDataAdapter Daten = new OleDbDataAdapter(command);
DataTable Datenquelle = new DataTable();
Daten.Fill(Datenquelle);
dataGridView1.DataSource = Datenquelle;
_startDate = _startDate.AddDays(1);
}
while (_startDate <= _endDate);
{
Debug.WriteLine(startDay);
startDay = startDay.AddDays(1);
}
函数。诀窍是它只返回真正定义属性的节点:
isinstance
输出:
get_node_attributes
当然,如果你的图表很大或是静态的,你应该保留id列表以便快速查询!
答案 1 :(得分:-3)
而不是graph.nodes()
,
你可以使用xpath。