解决类继承算法

发布于 2024-10-05 00:29:39 字数 339 浏览 2 评论 0原文

我有一个包含类继承信息的对列表,如下所示


[
  [Person, null],
  [Person, SpecialPerson], // Person extends SpecialPerson
  [SpecialPerson, VerySpecialPerson], // SpecialPerson extends VerySpecialPerson
]

是否有任何特定的算法可以压平此信息?

像这样:

人->特殊人员 ->非常特别的人

I have a list of pairs with class inheritance information like this


[
  [Person, null],
  [Person, SpecialPerson], // Person extends SpecialPerson
  [SpecialPerson, VerySpecialPerson], // SpecialPerson extends VerySpecialPerson
]

Is there any particular algorithm to flatten this information?

Like this:

Person -> SpecialPerson -> VerySpecialPerson

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

护你周全 2024-10-12 00:29:39

最后,它归结为 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 ,这与您的示例不同。

In the end, it boils down to a DAG (directed acyclic graph). Therefore you would do a breadth-first search or depth-first search. You only need the simplified case for trees.

Example (BFS, pseudo-code, untested):

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;
}

This assumes that you meant [null,Person], instead of the other way round. Note that it produces a null at the start of every result, differing from your example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文