设计模式——迭代器模式
来源:互联网 发布:女性假两性畸形 知乎 编辑:程序博客网 时间:2024/05/20 05:03
/// <summary> /// 测试枚举器 /// </summary> private static void TestItemerator() { var family = new Tree<Person>(new Node<Person>(new Person { Name = "Mr.Zhao", Birthday = "1983-01-13" }, new Node<Person>(new Person { Name = "Mr.Zhao's Son1", Birthday = "2012-01-12" }, new Node<Person>(new Person { Name = "Son1's Son11", Birthday = "2025-01-11" }, null, null), new Node<Person>(new Person { Name = "Son1's Son12", Birthday = "2025-01-11" }, null, null)), new Node<Person>(new Person { Name = "Mr.Zhao's Son2", Birthday = "2012-01-12" }, new Node<Person>(new Person { Name = "Son2's Son21", Birthday = "2025-01-11" }, null, null), new Node<Person>(new Person { Name = "Son2's Son22", Birthday = "2025-01-11" }, null, null)))); foreach (var p in family.Preorder) Console.WriteLine("{0}=>{1}", p.Name, p.Birthday); family.Where(p => string.Compare(p.Birthday, "2014-01-13") > 0).ToList().ForEach(p => { Console.WriteLine("家族成员【{0}=>{1}】在2014-01-13之后出生", p.Name, p.Birthday); }); }
1、树节点定义:
/// <summary> /// 泛型树节点 /// </summary> /// <typeparam name="T"></typeparam> public class Node<T> { public Node() { } public Node<T> Left { get; set; } public Node<T> Right { get; set; } public T Data { get; set; } public Node(T d, Node<T> left, Node<T> right) { Data = d; Left = left; Right = right; } }2、树定义:
/// <summary> /// 树:根节点、构造函数 /// </summary> /// <typeparam name="T"></typeparam> public class Tree<T> { Node<T> root; public Tree() { } public Tree(Node<T> head) { this.root = head; } public IEnumerable<T> Preorder { get { return ScanPreorder(root); } } /// <summary> /// 带委托的过滤器 /// </summary> /// <param name="filter">带条件的委托方法,返回真假</param> /// <returns></returns> public IEnumerable<T> Where(Func<T,bool> filter) { foreach(var p in ScanPreorder(root)) { if (filter(p)) yield return p; } } /// <summary> /// 遍历树节点 /// (前序遍历:根=>左节点=>右节点) /// </summary> /// <param name="root"></param> /// <returns></returns> private IEnumerable<T> ScanPreorder(Node<T> root) { yield return root.Data; if (root.Left != null) { foreach (var p in ScanPreorder(root.Left)) //所有左子树 { yield return p; } } if (root.Right != null) { foreach (var r in ScanPreorder(root.Right))//所有右子树 { yield return r; } } } }
0 0
- 设计模式——迭代器设计模式
- 每日设计模式——迭代器模式
- JAVA设计模式——迭代器模式
- java设计模式——迭代器模式
- JAVA设计模式——迭代器模式
- 设计模式——迭代器模式
- C++设计模式——迭代器模式
- 设计模式(9)——迭代器模式
- JAVA设计模式——迭代器模式
- 设计模式——迭代器模式
- 设计模式——迭代器模式
- PHP设计模式——迭代器模式
- JS设计模式——迭代器模式
- 【设计模式】——迭代器模式
- Java设计模式——迭代器模式
- 设计模式——迭代器模式
- 设计模式GOF23——迭代器模式
- 设计模式——迭代器模式详解
- Java 创建对象的四种方法
- [LTE-Sim]使用小结
- CSS Hack汇总快查
- oracle在线重定义案例分析
- gradle工程配置
- 设计模式——迭代器模式
- zen-Coding的使用
- 终于将windows search 彻底卸载
- 出现connection9060:0: detected conn error信息时的问题定位分析
- linux网络协议栈(六)传输层 (2)UDP协议 1)创建和bind
- matlab中的反正切函数
- 正则表达式之最短匹配
- 验证一个正整数各各位上是否有指定的数字
- 42 Android fragmentManager 获取fragment