using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication7
{
public class NodeData
{
public int id { set; get; } //标识
public int ParentId { set; get; }//父节点标识
public string NodeTitle { set; get; }//显示标题
public int sort { set; get; }//节点排序
public List<NodeData> NodeList { set; get; }//子列表
}
class Program
{
static void Main(string[] args)
{
List<NodeData> allnode = new List<NodeData>{
new NodeData{id=1,ParentId=0,sort=1,NodeTitle="节点类型I"}, //根节点的父节点为0
new NodeData{id=2,ParentId=1,sort=1,NodeTitle="节点A"},
new NodeData{id=3,ParentId=1,sort=2,NodeTitle="节点B"},
new NodeData{id=4,ParentId=1,sort=3,NodeTitle="节点C"},
new NodeData{id=5,ParentId=2,sort=1,NodeTitle="节点A_1"},
new NodeData{id=6,ParentId=2,sort=2,NodeTitle="节点A_2"},
new NodeData{id=7,ParentId=5,sort=1,NodeTitle="节点A_1_1"},
new NodeData{id=8,ParentId=5,sort=2,NodeTitle="节点A_1_2"},
new NodeData{id=9,ParentId=7,sort=1,NodeTitle="节点A_1_2_1"},
new NodeData{id=10,ParentId=4,sort=1,NodeTitle="节点C_1"},
new NodeData{id=11,ParentId=4,sort=2,NodeTitle="节点C_2"},
new NodeData{id=12,ParentId=11,sort=1,NodeTitle="节点C_2_1"},
new NodeData{id=13,ParentId=3,sort=1,NodeTitle="节点B_1"},
new NodeData{id=14,ParentId=0,sort=2,NodeTitle="节点类型II"},
new NodeData{id=15,ParentId=0,sort=3,NodeTitle="节点类型III"},
new NodeData{id=16,ParentId=15,sort=1,NodeTitle="节点a"},
new NodeData{id=17,ParentId=15,sort=2,NodeTitle="节点b"},
new NodeData{id=18,ParentId=17,sort=1,NodeTitle="节点b_1"},
};
//怎么转化为下面的形式?
List<NodeData> treenode = new List<NodeData>{
new NodeData{id=1,ParentId=1,sort=1,NodeTitle="节点类型I",NodeList=new List<NodeData>{
new NodeData{id=2,ParentId=1,sort=1,NodeTitle="节点A",NodeList=new List<NodeData>{
new NodeData{id=5,ParentId=2,sort=1,NodeTitle="节点A_1",NodeList=new List<NodeData>{
new NodeData{id=7,ParentId=5,sort=1,NodeTitle="节点A_1_1"},
new NodeData{id=8,ParentId=5,sort=2,NodeTitle="节点A_1_2",NodeList=new List<NodeData>{
new NodeData{id=9,ParentId=7,sort=1,NodeTitle="节点A_1_2_1"}
}},
}},
new NodeData{id=6,ParentId=2,sort=2,NodeTitle="节点A_2"}
}},
new NodeData{id=3,ParentId=1,sort=2,NodeTitle="节点B",NodeList=new List<NodeData>{
new NodeData{id=13,ParentId=3,sort=1,NodeTitle="节点B_1"}
}},
new NodeData{id=4,ParentId=1,sort=3,NodeTitle="节点C",NodeList=new List<NodeData>{
new NodeData{id=10,ParentId=4,sort=1,NodeTitle="节点C_1"},
new NodeData{id=11,ParentId=4,sort=2,NodeTitle="节点C_2",NodeList=new List<NodeData>{
new NodeData{id=12,ParentId=11,sort=1,NodeTitle="节点C_2_1"}
}}
}}
}},
new NodeData{id=14,ParentId=0,sort=2,NodeTitle="节点类型II"},
new NodeData{id=14,ParentId=0,sort=2,NodeTitle="节点类型III",NodeList=new List<NodeData>{
new NodeData{id=16,ParentId=15,sort=1,NodeTitle="节点a"},
new NodeData{id=17,ParentId=15,sort=2,NodeTitle="节点b",NodeList=new List<NodeData>{
new NodeData{id=18,ParentId=17,sort=1,NodeTitle="节点b_1"}
}},
}},
};
}
//数据可能有多重层次,不一定是四层的
//请教怎么递归或Linq能把第一个allnode变为第二个treenode结构?
}
}数据可能有多重层次,不一定是四层的。怎么递归或用Linq能把第一个allnode变为第二个treenode结构?类
解决方案 »
- 关于焦点的奇怪问题
- Request 对象无法获得页面中JS动态创建的 html标签 提交的值......................................懂得请..
- 删除树节点
- DataGridView 的列标题设置:小标题上再有大标题
- rtf文本颜色改变
- UserControl的大小问题?
- 庆祝下本人第一个C#程序即将完成(送分)
- 在vs.net下伪造源页面是不是这样写的? HttpWebRequest HWR = null;HWR.Referer = @"http://club.gzxxx.cn/";
- 提问:在线等待
- picturebox中如何正确显示imagelist中已有的图像?
- 提取url和锚文本应该怎么写正则
- c#问题求助
这是数据库的递归,道理完全一样
{
public static List<NodeData> dd = new List<NodeData>();
static void Main(string[] args)
{
//.......
//.......
tree(0, null, allnode);
}
public static void tree(int pid, NodeData node, List<NodeData> list)
{
var foot = from n in list
where n.ParentId == pid
select n;
foreach (var item in foot)
{
if (node == null)
{
NodeData dddd = new NodeData { id = item.id, ParentId = pid, sort = item.sort, NodeTitle = item.NodeTitle };
dd.Add(dddd);
tree(item.id, dddd, list);
}
else
{
NodeData dddd = new NodeData { id = item.id, ParentId = pid, sort = item.sort, NodeTitle = item.NodeTitle };
if (node.NodeList == null)
{
node.NodeList = new List<NodeData>();
}
node.NodeList.Add(dddd);
tree(item.id, dddd, list);
}
}
}
}
List<NodeData> ddddxxxx = new List<NodeData>();
tree(0, null, allnode, ref ddddxxxx); public static void tree(int pid, NodeData node, List<NodeData> list,ref List<NodeData> dd)
{
var foot = from n in list
where n.ParentId == pid
select n;
foreach (var item in foot)
{
if (node == null)
{
NodeData dddd = new NodeData { id = item.id, ParentId = pid, sort = item.sort, NodeTitle = item.NodeTitle };
dd.Add(dddd);
tree(item.id, dddd, list,ref dd);
}
else
{
NodeData dddd = new NodeData { id = item.id, ParentId = pid, sort = item.sort, NodeTitle = item.NodeTitle };
if (node.NodeList == null)
{
node.NodeList = new List<NodeData>();
}
node.NodeList.Add(dddd);
tree(item.id, dddd, list,ref dd);
}
}
}