c# in deep 之Lambda表达式于LINQ表达式结合后令人惊叹的简洁(2)

  当Lambda表达式和LINQ一起使用时,我们会发现原本冗长的代码会变得如此简单。比如我们要打印0-10之间的奇数,让其从高到低排列并求其平方根,现在只用一行代码即可完成其集合的生成,直接上代码:

  var collection= Enumerable.Range(0,10) .Where(x => x%2!=0).Reverse().Select(x => new{Original=x, SquareRoot=Math.Sqrt(x)});

            foreach (var element in collection)
            {
                Console.WriteLine("sqrt{0} = {1}",element.Original,element.SquareRoot);
            }

  再上面基础上,我们不妨再增加一个排序功能。在LINQ中,排序通常使用OrderBy或OrderByDecending方法来实现,若要根据属性的多项属性进行排序,后面可跟随ThenBy或ThenByDecendilng。假如我们要对(-10)-10的整数求平方根先按大小排序,再按原值排序,可进行如下设计:

              var collection = Enumerable.Range(-10, 21).Select(x => new { Original = x, sqare = x * x }).OrderBy(x => x.sqare).ThenBy(x => x.Original);

            foreach (var element in collection)
            {
                Console.WriteLine( "(Original={0} , Sqare={1})",element.Original, element.sqare);
            }

  需要注意的是,排序不会改变原有的集合——它返回的是新的序列,这与List.Sort和Array.Sort完全不同。LINQ操作是无副作用的,它既不会影响输入,也不会改变环境。

posted @ 2013-10-10 11:10  蚂蚁拉车  阅读(542)  评论(0编辑  收藏  举报