C# 创建嵌套列表的逻辑

C# 创建嵌套列表的逻辑,c#,html,logic,nested-lists,C#,Html,Logic,Nested Lists,我用以下格式解释一个包含嵌套列表的文本文件 - todo - clean kitchen - do dishes - sweep floor - cook dinner - defrost fish - shopping - milk - eggs 我想将这些项目放入列表中。我正在试图找出这样做的逻辑,目前,通过空格数计算“深度”并根据最后一个深度是高还是低添加打开或关闭ul标记是一个可怕的混乱 必须有一个智能、简洁的逻辑来完成这项工作,我没

我用以下格式解释一个包含嵌套列表的文本文件

- todo
  - clean kitchen
    - do dishes
    - sweep floor
  - cook dinner
    - defrost fish
  - shopping
    - milk
    - eggs
我想将这些项目放入
    列表中。我正在试图找出这样做的逻辑,目前,通过空格数计算“深度”并根据最后一个深度是高还是低添加打开或关闭
    ul
    标记是一个可怕的混乱


    必须有一个智能、简洁的逻辑来完成这项工作,我没有这个逻辑?

    应该很容易通过使用
    字符串来确定级别。IndexOf

    string line = file.ReadLine();
    int level = line.IndexOf('-');
    level = (level - 1)/2;
    
    处理级别的逻辑更有趣一些。像下面这样的方法应该可以很好地工作

    int lastLevel = -1;
    string line;
    while ((line = file.ReadLine()) != null)
    {
        int level = GetLevel(line); // from code above
        int diff = level - lastLevel;
        if (diff > 1)
        {
            // skipping multiple levels forward is probably an error.
            throw new ApplicationException();
        }
        if (diff == 1)
        {
            // next level. Add a <ul>
            WriteUl();
        }
        else if (diff == 0)
        {
            // same level. Add an <li>
            WriteLi(line);
        }
        else
        {
            // need to add </ul>, possibly multiple times
            do
            {
                WriteUlEnd();
                --lastLevel;
            } while (lastLevel > level);
        }
        lastLevel = level;
    }
    
    int lastLevel=-1;
    弦线;
    而((line=file.ReadLine())!=null)
    {
    int-level=GetLevel(line);//来自上面的代码
    int diff=级别-最后级别;
    如果(差异>1)
    {
    //向前跳过多个级别可能是一个错误。
    抛出新的ApplicationException();
    }
    如果(差异==1)
    {
    //下一级。添加一个
      WriteUl(); } 否则如果(差异==0) { //相同级别。添加一个
    • 书写(行); } 其他的 { //需要添加
    ,可能需要多次 做 { WriteUlEnd(); --最后一级; }while(lastLevel>level); } lastLevel=level; }

    如果你所拥有的只是你展示的数据,那真的是唯一的方法。你得数一数空格。

    谢谢吉姆,不过我希望能找到解决办法。一方面,它将我限制在有限的级别(也许我应该是)。实际上,我可能会采用完全不同的方法,使用div而不是无序列表,只需添加一个类,将它们缩进某个数量,我看不出级别有限有什么问题。在这种情况下,“有限”意味着超过20亿。如果你真的想变大,你可以用
    长的
    。而且,是的。。。您可以使用
    div
    来完成。它会稍微简化逻辑,因为你不必担心嵌套。啊,我稍微误读了代码,尽管它只适合一个深度级别,我还需要添加更多的if语句。谢谢