c# - 控制台树视图 C#
问题描述
大家好,这是我第一次发帖!:D
我有一个关于在 C# 的控制台应用程序中创建某种树视图的问题。我有一个文本文件,其中填充了许多行,这些行具有它们的 ID、文本和 ParentID。
我的任务是对每一行进行排序,因此 ParentID == 0 的那个是第一个,然后是其余的,但是我必须使用递归方法来排序。
到目前为止,我已经设法解析文本文件,将其放入一个类中并将这些类放在一个列表中,但是我在递归部分中没有成功。这是我不成功的尝试:
static void Main(string[] args)
{
string[] lines = File.ReadAllLines(@"C:\Users\text.txt");
List<Object> objects = new List<Object>();
foreach (string line in lines)
{
string[] col = line.Split(",");
objects.Add(new Object(int.Parse(col[0]), col[1], int.Parse(col[2])));
}
Recursive(objects, objects.Count-1);
foreach (var obj in objects)
{
Console.WriteLine("{0},{1},{2}", obj.ID, obj.name, obj.ParentID);
}
}
public static object Recursive(List<Object> objects, int a)
{
if (objects[a].ParentID == 0)
{
return objects[a];
}
else
{
return Recursive(objects, a-1);
}
}
}
public class Object
{
public int ID;
public string name;
public int ParentID;
public Object(int ID, string name, int ParentID)
{
this.ID = ID;
this.name = name;
this.ParentID = ParentID;
}
}
如果有人知道如何解决这个问题,我将不胜感激。我理解递归函数的概念,但我似乎无法绕过这个特定分配的逻辑。
这是文本文件的示例:
1,text,0
2,text,1
3,text,2
4,text,5
5,text,1
6,text,4
解决方案
以下是我的做法:
public static void Main (string[] args) {
// obviously, you're using a text file, but this part is inconsequential
string[] lines = "1,a,0|2,b,1|3,c,2|4,d,5|5,e,1|6,f,4".Split("|");
List<Object> objects = new List<Object>();
foreach(String line in lines) {
string[] col = line.Split(",");
objects.Add(new Object(int.Parse(col[0]), col[1], int.Parse(col[2])));
}
Recursive(objects, 0, 0);
}
public static void Recursive(List<Object> nodes, int parent, int level) {
String tabs = new String('\t', level);
foreach(Object node in nodes) {
if (node.ParentID == parent) {
Console.WriteLine(tabs + node.name);
Recursive(nodes, node.ID, level+1);
}
}
}
顺便说一句,当您说它们应该“按顺序”输出时,我们都假设您正在寻找深度优先搜索。
推荐阅读
- heroku - 无法将自定义域添加到我的 heroku 应用程序
- javascript - 删除使用材质 ui 和 Reactjs 创建的列表中的任何项目
- encoding - 如何获得 RoBERTa 词嵌入?
- python - 如何装饰 Tkinter 文本小部件
- flutter - 如何使用 Flutter 编写带有数字点的段落?
- apache-spark - Parquet 列无法在文件中转换,预期:bigint,发现:INT32
- excel-formula - Excel:函数 correl 和 pearson 有什么区别?
- python - 您如何询问字符串中是否有数字?
- javascript - 我在 Javascript 中使用 shortid 时遇到问题
- node.js - ES6:让类对每个方法都有一个定义