SelectMany替代二重foreach循环、用Linq替代C#2.0的写法

近来刻意强迫自己用Linq来替代C# 2.0的一些写法。
这里有一些心得和各位分享一下。
【菜科解读】
学习Linq其实已经很久了,但是一直没有使用的习惯,故水平也始终没有提高。
近来刻意强迫自己用Linq来替代C# 2.0的一些写法。
这里有一些心得和各位分享一下。
首先看下面两个类的定义:
class Student { public int Score { get; set; } public Student(int score) { this.Score = score; } } class Teacher { public string Name { get; set; } public List Students; public Teacher(string order,List students) { this.Name = order; this.Students = students; } }
用以上两个类构建集合如下:
List teachers = new List { new Teacher("a",new List{ new Student(100),new Student(90),new Student(30) }), new Teacher("b",new List{ new Student(100),new Student(90),new Student(60) }), new Teacher("c",new List{ new Student(100),new Student(90),new Student(40) }), new Teacher("d",new List{ new Student(100),new Student(90),new Student(60) }), new Teacher("e",new List{ new Student(100),new Student(90),new Student(50) }), new Teacher("f",new List{ new Student(100),new Student(90),new Student(60) }), new Teacher("g",new List{ new Student(100),new Student(90),new Student(60) }) };
这里有7个老师,每个人有3个学生,总共21一个学生里又有3个倒霉蛋没考及格……我们想要获得这3个倒霉蛋的集合。
C# 2.0的代码如下:
List studentList = new List(); foreach (var t in teachers) { foreach (var s in t.Students) { if (s.Score 首先是查询表达式的写法:
var list1 = from t in teachers from s in t.Students where s.Score 那还可以试试Lamda表达式的写法:
var list2 = teachers.SelectMany(t => t.Students).Where(s => s.Score SelectMany( this IEnumerable source, Func> selector)
这个用于IEnumerable的扩展方法接受一个Func委托,根据你的需要再返回另一个IEnumerable,配合Where真是秒杀二重foreach啊。
有时候我们需要输出更复杂的结果集,比如校长想知道教出这3个考不及格的倒霉蛋的,到底是哪几个更加倒霉的老师。
那我们就要用到SelectMany的另一个重载方法了:
public static IEnumerable SelectMany( this IEnumerable source, Func> collectionSelector, Func resultSelector)
第一眼看上去有点晕,重点是第一个Func委托的返回值IEnumerable,会遍历作为第二个Func委托的参数TCollection传递,供你构建所需要的投影集合。
这里给出一个例子,下面的代码选出了门下有不及格学生的倒霉蛋老师+门生的分数:
var list3 = teachers.SelectMany( t => t.Students, (t, s) => new { t.Name, s.Score }) .Where(n => n.Score SelectMany,替代,二重,foreach,循环,、,
屏幕挂灯可以用什么替代?屏幕挂灯值不值得买
作为一个需要经常画草图的互联网工作者,明亮清晰的灯光又是必不可少的,所以我决定入手一款屏幕挂灯。
和台灯相仿,屏幕灯有两个较显著的痛点: 1是光线射屏幕,反光刺眼;2是光线射眼睛,损眼。
对于这两大痛点的解决程度,也算是区分一款灯好坏的普适标准。
市面上的屏幕挂灯品牌众多,价格区间在99~999元不等。
为了选一款性价比高的好灯,我这个价格敏感型消费者可是没少下功夫。
留意同事的屏幕挂灯、爬帖子、比对电商网页、看测评……最终,我入手了这款朗德万斯屏幕灯。
原因有二:LED灯的核心在于灯珠,朗德万斯承接了原欧司朗的通用照明业务,包括历史悠久的OSRAM光源品牌等,百年通用照明国际品牌旗下的产品质量自然有保障;二是看中它的非对称配光设计,据说可以做到不反光不刺眼。
收到货后,仅作为一个普通买家,来给大家测评一下这款朗德万斯屏幕挂灯。
是圈粉还是踩雷?让我们共同见证吧~ 包装盒标示了屏幕灯的核心功能:非对称配光、防眩光设计、超高显色技术。
拆开外包装,露出产品本尊。
黑色的,挺百搭的。
85颗LED灯珠整齐排列,从这个高密度来说,应该可以保证光线充足柔和。
结构采用坡面非对称设计,是为了非对称出光,光照避开照在屏幕和人眼,从而达到无反光、不刺眼。
(类似于这种) 通电测了一下,相比于1~2百的屏幕灯全方位照亮你的屏幕灰尘来说,这款灯75发光角度,照面精准、光线边界清晰,不反光、无眩光。
这里放张数码大V王奔宏的测评图,在明基、朗德万斯、米家、倍思产品之间,大家可以自行参照下。
那些说边界没明基清晰的,你们清醒一点!明基WiT ScreenBar Plus可是999元啊,用它一半的价钱买到和它差不多的朗德万斯,宁还要啥自行车啊。
显色指数Ra95,比小米Ra90高,和明基不相上下,能够还原物体本色,这点对需要作图的工作者来说挺重要。
弱弱说句,因为在显色等方面没有什么测试设备,这方面主要凭个人及同事的感觉判断,杠精勿扰。
触摸式按钮,由右到左依次为开关、三档色温调节及亮度增减。
相比于小米2.4G无线连接来说,看似不占优势。
但我同事说,小米的控制器底盖没有支撑点,它用了一年半,从未成功拧开换过电池。
所以吧,大家自行判断哈~ 500LUX高亮度,满足读写要求,无频闪,比较舒服。
点按可7档调光,长按无极调光3000~5700K,色温亮度随手调。
看到这,不少朋友可能会问,这个色温啥时调高、啥时调低呢?这么说吧,当我们想要保持清醒、提升专注度时,推荐调至高色温(5000K-5500K)。
高色温有利于大脑保持兴奋状态,这也是为什么办公室、工厂、超市一般灯光是高色温的原因。
晚上看片、睡前阅读等休闲场景下将灯光调成低色温,因为低色温有利于大脑分泌褪黑素,在这样的环境下人体会更放松舒服,比较有治愈感~ #p#分页标题#e# 哦,光捡主要的说了,咱再来看看其他细节。
灯槽深度1cm左右,这种设计应该是为了防止灯光耀眼。
夹具特写 可以夹持3cm以内的显示器,这范围和价值999元的明基WiT ScreenBar Plus大体一致,一般常见的电脑屏幕都能适用。
角度控制通过夹具前段的铰链完成,比较方便。
固定起来很牢固,菜叶说说,也不需要担心损伤屏幕。
TYPE-C接口,背部USB接口,可连接电脑使用,充电宝也可实现供电。
总体来说,我对朗德万斯这款屏幕挂灯吧,还是挺满意的。
它极大的节省了桌面空间,外观简约、调节方便,性价比高,还有百年通用照明国际品牌背书,个人感觉还是物超所值的。
感兴趣的朋友,阔以去看看。
霸王计划制定了这么久 为什么最后被海王星所替代
听起来好像有道理,300万人的大行动,事先德国人真的没有任何觉察,没有加强防范么,要不然怎么会轻易被盟军突破方向。
事实上不是如此,诺曼底登陆是一个系统性工程,不可能一拍脑袋就实施,加上这是一个涉及多国部队的联合作战方案,更不可能有一家独自计划,贸然实行。
事实上,为“霸王行动”的诺曼底登陆计划是在英国早期入侵法国作战计划的基础上制订的,前后历经2年多,当然,这是一份绝密计划是毫无疑问的,而在实施之前,因为过于庞大,一般人也无法知悉全部内容。
1941年9月,英国联合作战司令部参谋长蒙巴顿海军上将,开始研究在欧洲战场实施两栖登陆并开辟第二战场的可行性,同年12月,美国参战后美方正式与英方计划人员一起工作,不久,英方提出了一个穿过英吉利海峡登陆法国的计划草案,代号“围捕”。
1943年1月卡萨布兰卡会议后,英国总参谋部任命摩根中将出任盟军最高司令(还没有被任命)的参谋长,并授权他制订入侵法国的计划,代号“铁砧”。
同年12月,美国陆军上将被任命为盟军最高司令,他选择在地中海的参谋长史密斯中将任盟军参谋长,摩根变成了副参谋长,作为平衡,英国空军上将泰德担任副总司令,主管战区空军。
经过激烈的讨价还价,艾森豪威尔最终搞定了一个由英美双方组成的联合委员会,继续筹划穿过海峡攻击法国的作战。
按照铁砧计划,盟军投入3-5个师,沿加来海峡进攻,攻击路线是从英国的多佛到法国的加来。
后来,艾森豪威尔和马利都认为3-5个师不够,因此,攻击地域被扩展到更广大地区,倾向于将卡昂纳入攻击范围,摩根的计划人员则认为,将桥头堡扩展到60英里会超出盟军现有资源,蒙哥马利却认为,要么找到解决办法,要么更换司令,这场争执挑起了有关“铁砧”计划价值的争论,艾森豪威尔开始考虑从法国北部进攻的计划,代号“霸王行动”。
1944年1月23日,盟军在争吵中决定从诺曼底发动攻击。
美军在西侧,目标瑟堡,英军在东侧,目标卡昂。
按照计划,进攻时间为1944年6月5日。
西线。
在登陆当天夜里,美国82和101空降师在圣母教堂镇附近空降,占领通往海岸的道路,阻止敌人加强海岸防御。
第二天,布雷德利的第1集团军会到达那里,第7军第4师在法里维尔沙丘附近的犹他海滩登陆,东面,第5军第1师和29师一部,在维耶维尔附近的奥马哈海滩登陆,登陆成功后,第5军扩大滩头阵地,第7军穿过科坦因半岛,向南占领瑟堡,然后挥师南下,占领圣路易斯,一旦占领圣路易斯和圣路易斯-佩里尔公路,第1集团军就准备使用机械化部队实施进攻作战。
其后,巴顿的第3集团军进入战场,向布列塔尼半岛进军,占领布雷斯特和其他港口,并在第1集团军进攻巴黎时,负责其右翼安全, 东线。
英国第2集团军在巴约与卡昂间展开,英国第6空降师在H时前在卡昂和奥恩河口附近空降,占领作战区的东北翼。
英国30军第50师在靠近巴约的黄金海滩登陆。
第1军分两路向东进攻。
加拿大第3师在朱诺海滩登陆,英国第3师在箭滩登陆。
在登陆成功后,各部迅速占领交通要道,以便装甲部队展开。
为欺骗敌军,使他们相信登陆地点是加莱而不是科坦因,盟军虚构了以多佛为基地的第1集团军群,其编制比蒙哥马利的第21集团军群还大,并任命巴顿任该集团军群总司令。
为避免进攻时间泄露,盟军将这一天定为D日,从1943年9月以后,霸王行动的计划文件全部使用海王星替代。
1944年2月,英美联合参谋长委员会批准了“霸王计划大纲和修改后的作战计划,但是随之对登陆舰艇的需求也增加了,为了确保拥有足够的登陆舰艇,英美联合参谋长委员会决定将登陆日期推迟到6月初,并且将原定同时在法国南部的登陆推迟到8月。
以上这些仅仅是计划当时都是,就是在诺曼底登陆前的盟军幕后情形,也令人感到惊心动魄,因为涉及英美等几个盟军主力联合作战,在选择地点上上也是颇为周折,其中信息虚虚实实,德国情报部门会获取一些,但不可能全部得到计划文本,而且这些所谓的泄露信息也是虚实难辨,也增加了德军的防御难度,当时在向汇报的时候,希特勒曾经担心盟军会登陆,问隆美尔元帅有可能的几个地点,隆美尔站在地图前想了一想,给希特勒指出了几个可能的地点,其中包括诺曼底。
但当时仅仅是假想,希特勒手下其他高级将领也是各抒己见,各自说出自己的理由,结果不了了之。
在诺曼底登陆开始前,德军重兵防守的是加莱,而诺曼底的防务较为薄弱,可见德军统帅高层依然相信盟军会从加莱破局,这就是高手过招,稍纵即逝,一念之间,定天下大计,假如当初重兵防守诺曼底,历史会被改写么?谁知道呢,这样的假设毫无意义。
随机文章海上的大阪关西国际机场,专家称50年后将被水淹没美女效应是什么意思,美女成为各行各业手中的利器(单生狗跪舔)解读北极恐怖现象,暴风雪频发冰川时而崩塌(环境堪比火星)谷歌和苹果哪个厉害,谷歌市盈率是苹果1.8倍(未来或更强)揭秘越战老兵不敢说的秘密,越南女兵不穿内衣战场用美人计