zoukankan      html  css  js  c++  java
  • CollectionClosureMethod in .Net

    Martin Fowler昨天发布了一篇有关Collection Closure的文章, 文中以Ruby为例展示了Collection Closure的强大,方便. 对照着他的例子, Demo了一下在C#中如何实现类似的功能.

    Example 1

    employees.each do |e|
        e.doSomething
      end

       31    employees.ForEach(delegate(Employee e)

       32                             {

       33                                 e.DoSomething();

       34                             });


    Example 2

    managers = employees.select {|e| e.manager?}

       36   List<Employee> managers = employees.FindAll(delegate(Employee e)

       37                                                     {

       38                                                         return e.IsManager == true;

       39                                                     });


    Example 3

    offices = employees.collect {|e| e.office}

       43  List<Office> offices = employees.ConvertAll<Office>(delegate(Employee e)

       44                                                     {

       45                                                         return e.Office;

       46                                                     });


    Example 4

    managersOffices = employees.select{|e| e.manager?}.map {|m| m.office}

       48  List<Office> managerOffices = employees.FindAll(delegate(Employee e)

       49                                                     {

       50                                                         return e.IsManager == true;

       51                                                     }).ConvertAll<Office>(delegate(Employee e)

       52                                                     {

       53                                                         return e.Office;

       54                                                     });


    Example 5

    allManagers = employees.all? {|e| e.manager?}
    noManagers = ! employees.any? {|e| e.manager?}


       56   bool allManagers = employees.TrueForAll(delegate(Employee e)

       57                                                     {

       58                                                         return e.IsManager == true;

       59                                                     });

       60   bool noManager = employees.TrueForAll(delegate(Employee e)

       61                                                    {

       62                                                        return e.IsManager == false;

       63                                                    });


    Example 6

    sortedEmployees = employees.sort {|a,b| a.lastname <=> b.lastname}

       64 employees.Sort(delegate(Employee a, Employee b)

       65                                               {

       66                                                   return a.Age.CompareTo(b.Age);                                              

       67                                               });


    Example 7

    total = employees.inject(0) {|result, e| result += e.salary}

       68             double  total = 0;

       69             employees.ForEach(delegate(Employee e)

       70                            {

       71                                total += e.Salary;

       72                            });


    未实现的功能:
    1.   sortedEmployees = employees.sort_by {|e| e.lastname}  指定sort属性
    2.   managers, plebs = employees.partition{|e| e.manager?}   多重赋值

    可以看出通过C# 2.0对泛型集合提供的新方法以及对匿名方法的支持,使得它也能方便的实现Closure.
  • 相关阅读:
    18 个 Java8 日期处理的实践,太有用了!
    IntelliJ IDEA 2019.3安装激活破解使用教程
    低收入人员如何打造自己核心竞争优势
    关于企业网络营销的实战步骤
    关于如何做好微信营销和QQ营销的心得
    百度竞价项目的一些简要说明
    ASO是什么?AppStore搜索规则是什么?
    如何选择APP推广渠道和推广技巧
    浅析Hibernate映射(二)——关系映射(3)
    浅析Hibernate映射(二)——关系映射(4)
  • 原文地址:https://www.cnblogs.com/idior/p/205506.html
Copyright © 2011-2022 走看看