TreeBuilder科学的树创建器
2016-06-04 07:13
399 查看
public static class TreeBuilder { public static List<dynamic> Build(IEnumerable<dynamic> collection, Func<dynamic, int, dynamic> parser, Func<dynamic, bool> rootSelector, Func<dynamic, dynamic, int, bool> childrenSelector) { if (collection != null && parser != null && rootSelector != null && childrenSelector != null) { var roots = collection.Where(rootSelector).Select(item => parser(item, 0)).ToList(); roots.ForEach(node => { BuildChildren(collection, node, parser, 1, childrenSelector); }); return roots; } return null; } private static void BuildChildren(IEnumerable<dynamic> collection, dynamic parent, Func<dynamic, int, dynamic> parser, int level, Func<dynamic, dynamic, int, bool> childrenSelector) { var children = collection.Where(t => childrenSelector(t, parent, level)).Select(item => parser(item, level)).ToList(); if (children != null && children.Count > 0) { parent.state="closed"; parent.children=children; children.ForEach(node => { BuildChildren(collection, node, parser, level + 1, childrenSelector); }); } } }
示例:
string sql = @"SELECT [Id] ,[PId] ,[Name] ,[OfficeTel] ,[Fax] ,[SafeTel] ,[MSTel] ,[ElectricTel] ,[Order] ,[Type] FROM [NEMS].[dbo].[ContactInfo] where [type]=@type order by [Order] "; BatchDataHelper helper = new BatchDataHelper("NEMSConnString"); var list = helper.Query(sql, new List<KeyValuePair<string, object>>() { new KeyValuePair<string, object>("type", type) }); var tree = TreeBuilder.Build(list, (d, i) => { d.Level = i; return d; }, d => d.PId == 0, (d, n, i) => n.Id == d.PId);
参数一为构件树的数据集合,参数二为树节点转化委托,参数三为根节点选择器,参数四是父子关系选择器.
相关文章推荐
- Android总结Handler异步更新UI界面
- GUI中的事件绑定
- 特殊权限SUID等详解
- SPOJ DQUUERY (在线主席树 | 离线树状数组)
- EasyUI布局 高度自适应
- testNg+ant+jenkins之ant配置build.xml
- EasyUI datebox 日期选择范围
- 左式堆 斜堆 buildHeap
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- iOS开发学习笔记-UIScrollView的用法
- GUI图形用户接口的基本使用
- windows平台时间函数性能比较QueryPerformanceCounter,GetTickCount,ftime,time,GetLocalTime,GetSystemTimeAsFileTim
- UESTC 491 Tricks in Bits (暴力回溯 + 剪枝)
- trickyPriorityQueue
- iOS开发——搜索框(UISearchController)
- pom.xml报错:web.xml is missing and <failOnMissingWebXml> is set to true
- UESTC 490 Swap Game (特殊的求解逆序对数)
- windows 安装 scrapy、pip、requests
- uibarbuttonitem颜色
- Android UI系列-----ImageView的scaleType属性