我有一个包含这样的类继承信息的对列表
[
[Person, null],
[Person, SpecialPerson], // Person extends SpecialPerson
[SpecialPerson, VerySpecialPerson], // SpecialPerson extends VerySpecialPerson
]
是否有任何特定的算法可以扁平化这些信息?
像这样:
Person -> SpecialPerson -> VerySpecialPerson
最佳答案
最后,它归结为 DAG(有向无环图)。因此,您将进行广度优先搜索或深度优先搜索。您只需要树的简化情况。
示例(BFS,伪代码,未经测试):
List<Array<Typespec>> flatten(Array<Pair<Typespec,Typespec>> input) {
List<Array<Typespec>> result;
Queue<Array<Typespec>*> q;
var elem=&result.append([null]);
q.append(elem);
while (!q.empty()) {
for (i in input) {
if (i.first==q.front().back()) {
var elem=&result.append(q.front().clone().append(i.second));
q.append(elem);
}
}
q.pop_front();
}
return result;
}
这假定您的意思是 [null,Person]
,而不是相反。请注意,它会在每个结果的开头生成一个 null
,这与您的示例不同。
关于algorithm - 解析类继承算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296767/