gpt4 book ai didi

c# - C#中的解析树

转载 作者:行者123 更新时间:2023-11-30 16:31:22 25 4
gpt4 key购买 nike

我有一个像这样的[文本]树:

+---step-1
| +---step_2
| | +---step3
| | \---step4
| +---step_2.1
| \---step_2.2
+---step1.2

树2

+---step-1
| \---step_2
| | +---step3
| | \---step4
+---step1.2

这只是一个小例子,树可以更深,有更多的 child 等等。

现在我正在这样做:

for (int i = 0; i < cmdOutList.Count; i++)
{
string s = cmdOutList[i];
String value = Regex.Match(s, @"(?<=\---).*").Value;
value = value.Replace("\r", "");
if (s[1].ToString() == "-")
{
DirectoryNode p = new DirectoryNode { Name = value };
//p.AddChild(f);
directoryList.Add(p);
}
else
{
DirectoryNode f = new DirectoryNode { Name = value };
directoryList[i - 1].AddChild(f);
directoryList.Add(f);
}
}

但这不处理“step_2.1”和“step_2.2”

我认为我这样做是完全错误的,也许有人可以帮我解决这个问题。

编辑:

这里是 DirectoryNode 类,使它更清楚一点..

public class DirectoryNode
{
public DirectoryNode()
{
this.Children = new List<DirectoryNode>();
}
public DirectoryNode ParentObject { get; set; }
public string Name;
public List<DirectoryNode> Children { get; set; }

public void AddChild(DirectoryNode child)
{
child.ParentObject = this;
this.Children.Add(child);
}
}

最佳答案

如果您的文本很简单(只是 +---\--- 前面有一系列 |),那么正则表达式可能超出您的需要(以及什么让您感到困惑)。

DirectoryNode currentParent = null;
DirectoryNode current = null;
int lastStartIndex = 0;

foreach(string temp in cmdOutList)
{
string line = temp;

int startIndex = Math.Max(line.IndexOf("+"), line.IndexOf(@"\");

line = line.Substring(startIndex);

if(startIndex > lastStartIndex)
{
currentParent = current;
}
else if(startIndex < lastStartIndex)
{
for(int i = 0; i < (lastStartIndex - startIndex) / 4; i++)
{
if(currentParent == null) break;

currentParent = currentParent.ParentObject;
}
}

lastStartIndex = startIndex;

current = new DirectoryNode() { Name = line.Substring(4) };

if(currentParent != null)
{
currentParent.AddChild(current);
}
else
{
directoryList.Add(current);
}
}

关于c# - C#中的解析树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4958701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com