最近一直在研究树形结构菜单,无意中让我弄了出来。先上代码:

首先需要这个的一个类

public class Tree
{
public int id { get; set; }
public string address { get; set; }
public int parent_id { get; set; }
public int depth { get; set; }
}

private static List<Tree> listTree = new List<Tree>(); // 定义一个全局的list来存放数据
static void Main(string[] args)
{
//初始化数据
var data = new List<Tree>()
{
new Tree{ id=1, address="安徽", parent_id = 0, depth=1 },
new Tree{id=2, address="江苏", parent_id = 0, depth=1},
new Tree{id=3, address="合肥", parent_id = 1, depth=2},
new Tree{id=4, address="庐阳区", parent_id = 3, depth=3},
new Tree{id=5, address="大杨镇", parent_id = 4, depth=4},
new Tree{id=6, address="南京", parent_id = 2, depth=2},
new Tree{id=7, address="玄武区", parent_id = 6, depth=3},
new Tree{id=8, address="梅园新村街道", parent_id = 7, depth=4},
new Tree{id=9, address="上海", parent_id = 0, depth=1},
new Tree{id=10, address="黄浦区", parent_id = 9, depth=2},
new Tree{id=11, address="外滩", parent_id = 10, depth=3},
new Tree{id=12, address="安庆", parent_id = 1, depth=2}
};

var list = GetSubTree(data, 0);

foreach (var item in list)
{
string space = string.Empty;
if (item.depth != 1)
{
for (var i = 0; i < item.depth; i++)
{
space += " ";
}
}

Console.WriteLine(space + "id={0},address={1},parent_id={2},depth={3}", item.id.ToString(), item.address, item.parent_id, item.depth);
}

}
/// <summary>
/// 组装树形结构数据
/// </summary>
/// <param name="data"></param>
/// <param name="parent_id"></param>
/// <returns></returns>
private static List<Tree> GetSubTree(List<Tree> data, int parent_id)
{
foreach (var item in data)
{
if (item.parent_id == parent_id)
{
listTree.Add(item);
GetSubTree(data, item.id);
}
}
return listTree;
}

执行结果如下:

简简单单,希望大神指点迷津。

最新文章

  1. PHP图片加文字水印和图片水印方法(鉴于李老师博客因没加水印被盗,特搜集的办法。希望能有用!)
  2. servlet获取表单数据的方式和编码方式
  3. Java主函数定义
  4. Unreal Engine Plugin management
  5. layabox 引擎
  6. 云计算P2V的迁移过程
  7. openssl命令用法
  8. Python开发专业工具推荐
  9. 配置Ssh免密码登录
  10. springxml配置构造函数入参
  11. wcf xml消息客户端cookie
  12. CSS传统布局之布局模型
  13. 剑指offer-面试题7:俩个栈实现队列(java)
  14. byte和长度为8的boolean数组互相转换
  15. 浅谈RNN、LSTM + Kreas实现及应用
  16. C++中的auto的使用
  17. nginx最简安装
  18. windows下尝试编写node模块
  19. 用于HTML5移动开发的10大移动APP开发框架【转】
  20. oracle获取执行计划及优缺点 详解

热门文章

  1. Python——连接数据库
  2. LeetCode 179 Largest Number 把数组排成最大的数
  3. pat1035. Password (20)
  4. 打印机设置dns
  5. 【收藏】这么多WEB组件(CSS),攒一个网站够了吧?
  6. springMvc 添加定时任务
  7. Js/Jquery获取input file的文件名
  8. iQuery stop()
  9. Oracle数据的导入导出
  10. linux 命令——6 rmdir(转)