对于C#的query查询语法,其可读性和可维护性要比原来的loop操作好得多

例子:

同样是创建个二维元组,并对其元组按到原点的距离进行倒序排序,用query 语法的表达形式要比原始的循环做法来的更易读、更易于维护,并且省去了用于存储中间过程的额外临时变量(例子中原始方法用的 storage对象)

//原始的循环方法

private static IEnumerable<Tuple<int, int>> ProduceIndices3()

{

var storage = new List<Tuple<int, int>>();

for (int x = 0; x < 100; x++)

for (int y = 0; y < 100; y++)

if (x + y < 100)

storage.Add(Tuple.Create(x, y));

storage.Sort((point1, point2) =>

(point2.Item1*point2.Item1 +

point2.Item2 * point2.Item2).CompareTo(

point1.Item1 * point1.Item1 +

point1.Item2 * point1.Item2));

return storage;

}

//query syntax

private static IEnumerable<Tuple<int, int>> QueryIndices3()

{

  return from x in Enumerable.Range(0, 100)

    from y in Enumerable.Range(0, 100)

    where x + y < 100

    orderby (x*x + y*y) descending

    select Tuple.Create(x, y);

}

//using the method call syntax

private static IEnumerable<Tuple<int, int>> MethodIndices3()

{

return Enumerable.Range(0, 100).

SelectMany(x => Enumerable.Range(0,100),

(x,y) => Tuple.Create(x,y)).

Where(pt => pt.Item1 + pt.Item2 < 100).

OrderByDescending(pt =>

pt.Item1* pt.Item1 + pt.Item2 * pt.Item2);

}

转载于:https://www.cnblogs.com/haokaibo/archive/2011/07/03/2096968.html

Effective C# 学习笔记(八)多用query语法,少用循环相关推荐

  1. MongoDB 学习笔记八 复制、分片、备份与恢复、监控

    MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...

  2. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  3. Effective C++ 学习笔记 第七章:模板与泛型编程

    第一章见 Effective C++ 学习笔记 第一章:让自己习惯 C++ 第二章见 Effective C++ 学习笔记 第二章:构造.析构.赋值运算 第三章见 Effective C++ 学习笔记 ...

  4. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  5. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

  6. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  7. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  8. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  9. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  10. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

最新文章

  1. 旅行售货员 java_JAVA旅行商售货TSP
  2. 图像分割之(二)Graph Cut(图割)
  3. HashMap和HashSet的内部工作机制
  4. zabbix-server-mysql安装_zabbix server 安装部署
  5. 计算机中丢失dinput8,修复dnfdinput8.dll
  6. 让input支持 ctrl v上传粘贴图片? 让input支持QQ截图或剪切板中的图像数据(Java实现保存)...
  7. web前端基础知识-(六)jQuery-补
  8. Win10蓝牙鼠标老是断连卡顿的解决方法
  9. DXUT框架剖析(6)
  10. MarkDown常用语法及word转MarkDown
  11. 怎样删除Word文档的强制性回车、断行
  12. 软件架构领域集大成者——《架构之美》读书笔记
  13. 03、单线通讯—SIF通讯协议(一线通)案例二
  14. Leetcode刷题 2021.02.15
  15. 一年工作经验,两周的面试,拿到几个offer的面试经验总结
  16. php支付宝的签名处理,PHP实现RSA签名生成订单功能【支付宝示例】
  17. 供应链安全 | 北京大学软件工程国家工程研究中心 张世琨:软件供应链安全的风险和成因分析
  18. 工具学习——有哪些好用的语音转文字app
  19. 任意列+左右两列等高布局,并要求有最小高度
  20. 计算机复制操作的方法,怎么用键盘复制粘贴?电脑使用键盘复制粘贴的方法

热门文章

  1. rca接口_音频线怎么区别?几种音频接口逐一介绍
  2. 计算机毕业论文多久,计算机毕业论文
  3. kdj值应用口诀_KDJ买卖绝学!记住这些操作 精准判断quot;顶部和底部quot; 让你远离亏损...
  4. vc6 前进后退 番茄_openMP 使用 VC6+Intel Compiler 9.1 (来自网络)
  5. C++中sstream的简单使用
  6. python免安装版_web.py入门01——python安装
  7. Docker镜像加速,设置国内源
  8. python验证卡普耶卡(D.R.Kaprekar)6174猜想
  9. 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果
  10. HDU 1232 - 畅通工程