使用列表创建“树状”结构

时间:2014-07-25 17:21:08

标签: c# tree nested-lists

好吧,我有一个程序可以使用多个字符串源,并将它们存储在列表中。 我想在每个'。'修剪字符串。并存储在某处获得的句子。 然后从第一句开始,我想在每个空白处修剪它并将每个单词存储在某个地方。

我想稍后访问每个单词以组合单词,如果我可以像sources.source [2] .sentence [23] .level [2] .word [2]或类似的东西那样访问它们会很棒

我将制作这样的组合:Jon有蓝色药片。 (例如:这是source.source [2] .sentence [1])

Jon |有|蓝色|丸。 (1级)

约翰有|有蓝色|蓝色药丸。(level2)

约翰有蓝色|有蓝色药丸。(level3)

约翰有蓝色药片。 (级别4)

我尝试使用嵌套列表,但我不知道如何编辑子列表中的特定索引。

图片示例:http://prntscr.com/469ty2

1 个答案:

答案 0 :(得分:0)

我并不完全明白你正在尝试做什么,但这里有一个简单的启动器,让你了解如何使用列表构建树结构。

如果您定义一个Fragment来表示树中的一个节点,那么它需要包含一个字符串及其子节点列表:

class Fragment
{
    string Content { get; set; }
    List<Fragment> Children { get; set; }
}

要构建树,您可以使用root创建root.Content = "John has blue pills"片段。

然后(递归地)处理这个片段以细分它并创建它的孩子(例如两个片段包含内容&#34; John有&#34;和#34;蓝色药片&#34;)。您可以使用root.Children.Add()将这两个片段添加为根的子级。然后(递归地)处理每个片段((&#34; John&#34;,&#34; has&#34;)和(&#34; blue,&#34; pills&#34;)),等等...

要提取数据,您必须使用类似root.Children[0].Children[1].Content的表单来引用第三级的内容(在我的示例中,这将返回&#34;有&#34;)。

当然,如果您有固定结构(段落,句子,单词),那么您可以像这样表示三个级别(在伪代码中突出显示键结构):

class Paragraph { List<Sentence> Sentence; }
class Sentence  { List<string>  Word;

...在根级别,您的程序将保留List<Paragraph> Paragraph;

然后您的客户端代码将更具可读性:string word = Paragrah[2].Sentence[14].Word[5]