C#树数据结构,生成输出
我通过类创建了自己的树数据结构。 现在我只能做一些基本的事情了。我需要根据列表中的数据将输出制表符分隔的文件设置为C#树数据结构,生成输出,c#,data-structures,recursion,tree,C#,Data Structures,Recursion,Tree,我通过类创建了自己的树数据结构。 现在我只能做一些基本的事情了。我需要根据列表中的数据将输出制表符分隔的文件设置为 我认为递归是唯一的方法 树是N-树,输出的第一行作为标题,其他行是值 树: 味精(MainTreeNode) MainParam(必须有属性名称,不必有属性值) 子参数1(必须有属性名称,必须有属性值) 子参数2(必须有属性名称,不必有属性值) SubSubParam2.1(必须有属性名称,必须有属性值) 等等 或: 信息:姓名 Param1:ValueV1(值必须为
我认为递归是唯一的方法 树是N-树,输出的第一行作为标题,其他行是值 树:
- MainParam(必须有属性名称,不必有属性值)
- 子参数1(必须有属性名称,必须有属性值)
- 子参数2(必须有属性名称,不必有属性值)
- SubSubParam2.1(必须有属性名称,必须有属性值)
等等
- SubSubParam2.1(必须有属性名称,必须有属性值)
- Param1:ValueV1(值必须为,因为它没有子项)
- 参数2
- 参数2.1:ValueV2
- 参数2.2:值
- 参数2.2.1:ValueV3
- 参数2.2.2:ValueV4…等
public void PrintToTabFile(List<Message> messages, List<string> parameters)
{
foreach (string s in parameters)
{
using (StreamWriter streamWriter = new StreamWriter(@"C:\temp\" + s + ".xls"))
{
streamWriter.Write("No.\tMsgName\tMsgData1\tMsgData2\tMsgData3");
var msg = messages.Where(x => x.Parameters.Where(p => p.ParameterName == s).Count() == 1);
List<string> headers = new List<string>();
List<string> values= new List<string>();
//... Stuck!!!
}
}
}
private void Recursion(Parameter parameter, List<string> headers, List<string> values)
{
if (parameter.SubParameters.Count == 0)
{
int index = headers.IndexOf(parameter.ParameterName);
values[index] = parameter.ParameterValue;
}
else
{
foreach (Parameter p in parameter.SubParameters)
{
Recursion(p, headers, values);
//and Stuck Probably here or before recursion call
}
}
}
public void PrintToTabFile(列出消息,列出参数)
{
foreach(参数中的字符串s)
{
使用(StreamWriter StreamWriter=newstreamwriter(@“C:\temp\”+s+“.xls”))
{
streamWriter.Write(“No.\tMsgName\tMsgData1\tMsgData2\tMsgData3”);
var msg=messages.Where(x=>x.Parameters.Where(p=>p.ParameterName==s.Count()==1);
列表标题=新列表();
列表值=新列表();
//…卡住了!!!
}
}
}
私有无效递归(参数、列表标题、列表值)
{
if(parameter.SubParameters.Count==0)
{
int index=headers.IndexOf(parameter.ParameterName);
值[索引]=parameter.ParameterValue;
}
其他的
{
foreach(参数子参数中的参数p)
{
递归(p、头、值);
//并且可能卡在这里或递归调用之前
}
}
}
我不会说我真的知道你在问什么,但我还是要试一试。在我看来,这似乎是一个非常基本的递归,可以在执行时遍历带有一些奇怪输出的树结构。
试着这样做:
1.为所有类创建一个名为INode的接口。这个接口应该包含一些典型的东西,比如列表子项、INode父项等。
2.让所有类实现这个接口(或者让它们继承一个实现这个接口的基类)
3.现在从基本类开始,使用Children属性递归遍历所有子类并生成输出
我想这应该能奏效。(对不起,这里没有VS来提供一些真实的代码)
顺便说一句:你可能会在stackoverflow上找到很多关于这个的帖子
public void PrintToTabFile(List<Message> messages, List<string> parameters)
{
foreach (string s in parameters)
{
using (StreamWriter streamWriter = new StreamWriter(@"C:\temp\" + s + ".xls"))
{
streamWriter.Write("No.\tMsgName\tMsgData1\tMsgData2\tMsgData3");
var msg = messages.Where(x => x.Parameters.Where(p => p.ParameterName == s).Count() == 1);
List<string> headers = new List<string>();
List<string> values= new List<string>();
//... Stuck!!!
}
}
}
private void Recursion(Parameter parameter, List<string> headers, List<string> values)
{
if (parameter.SubParameters.Count == 0)
{
int index = headers.IndexOf(parameter.ParameterName);
values[index] = parameter.ParameterValue;
}
else
{
foreach (Parameter p in parameter.SubParameters)
{
Recursion(p, headers, values);
//and Stuck Probably here or before recursion call
}
}
}