【问题标题】:Hierachial Tree buiding from flat collection从平面集合构建分层树
【发布时间】:2015-10-01 21:46:14
【问题描述】:

我需要从由点 (.) 分隔的分层平面集合构建一棵树,例如 C# 中的命名空间。以下是一些作为集合(有序)的条目值:

A0.A0.A0
A1
A1.A2
A2.A3.A3.A2
A3.A2
A3.A4.A5.A3
A3.A4.A5.A4
B0.B1.B0
B1.B2
B1.B2.B3
B1.B2.B4

这个集合看起来像 C# 中的命名空间。所以我们假设它们是命名空间(你可以理解 A.A.A.A 命名空间是真正合法的)。

我需要什么?

我需要这个集合中的父子树,如下所示(注意,我们节省了一些空间,将一些名称连接在一起):

A0.A0.A0
A1
   A2
A2.A3.A3.A2
A3
   A2
   A4.A5        
      A3
      A4
B0.B1.B0
B1.B2
     B3
     B4

在这种情况下,我们将只有 6 个根对象。

这是我们算法的接口:

    public interface IParentChild
    {
        IEnumerable<IParentChild> Children { get; set; }
        string FullName { get; set; }
        string Name { get; set; }
    }

有什么建议吗?

【问题讨论】:

  • 您的树似乎不正确。 A3 和 A4 应该向右移动一步(从 A5 下方)
  • IParentChild 接口是否模拟运行算法的结果? FullNameName 有什么区别?
  • 到目前为止你尝试过什么?
  • 你想生成文本文件吗?或者你想从文本文件解析成集合?
  • 我猜第 6 行的 A2 应该在第 5 行的 A3 之后?

标签: c# algorithm hierarchical-data


【解决方案1】:
  1. 使用此答案Parsing one terabyte of text and efficiently counting the number of occurrences of each word中给出的 Trie 数据结构@

  2. 修改 #1 中的 Trie 生成代码以存储命名空间

  3. 遍历 Trie 并将内容输出到控制台。

如果您需要更多详细信息,请对此发表评论,我可以快速编写代码。

【讨论】:

  • 你可以简单一点。写作:'简单地做' :) 实际上我已经一个人做了。但我喜欢你的评论。这真的是天才,对每个 stackoverflow 用户都非常有帮助。我批准它作为一个可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多