我通过类创建了自己的树数据结构。
现在我坚持使用非常基本的东西。我需要从 my List <MainTreeNode>
中的数据中创建输出制表符分隔文件
我认为递归只是方法吗?!
树是N树,输出的第一行是标题,其他行是值。
树
- MSG(MainTreeNode)
醇>
- MainParam(必须拥有NAME,不必拥有支持值)
- SubParam1(必须有道具NAME,必须有道具价值)
- SubParam2(必须有道具NAME,不必有道具值)
- SubSubParam2.1(必须有道具NAME,必须有道具值)
等。
或
- 消息:姓名
醇>
- Param1:ValueV1(VALUE必须,因为它没有孩子)
- 参数2
- Param2.1:ValueV2
- Param2.2:价值
- Param2.2.1:ValueV3
- Param2.2.2:ValueV4 ......等。
输出必须像这样(第一行是标题):
Param1|Param2/Param2.1|Param2/Param2.2/Param2.2.1|Param2/Param2.2/Param2.2.2
ValueV1|ValueV2|ValueV3|ValueV4
...
所以我需要List for header和value,但我不知道如何以递归方式(或任何其他方式)实现它。
一些未完成的代码:
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
}
}
}
答案 0 :(得分:0)
我不会声称我真的知道你在问什么,但我仍然会给它开枪。对我来说,这似乎是一个非常基本的递归来遍历一个具有一些奇怪输出的树结构,而你正在这样做。 试试这样: 1.为所有名为INode的类创建一个接口。此接口应包含List Children,INode Parent等典型内容。 2.使所有类实现此接口(或让它们继承执行此操作的基类) 3.现在从基础clase开始,使用Children属性递归遍历所有Children并生成输出。
这应该是我猜的伎俩。 (对不起,这里没有VS提供一些真实的代码)
BTW:你可能已经在stackoverflow上发现了大量关于这个帖子。