用于创建嵌套列表的逻辑

本文关键字:列表 创建 嵌套 用于 | 更新日期: 2023-09-27 18:01:43

我正在解释一个嵌套列表的文本文件,格式如下

- todo
  - clean kitchen
    - do dishes
    - sweep floor
  - cook dinner
    - defrost fish
  - shopping
    - milk
    - eggs

我想把这些项放到

    列表。我试图找出这样做的逻辑,目前它是一个可怕的混乱计算"深度"通过空间的数量,并根据最后的深度是高还是低添加打开或关闭ul标签。

    必须有一个聪明的,整洁的逻辑来做这件事,我错过了?

    用于创建嵌套列表的逻辑

    应该很容易通过使用string.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;
    }
    

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