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,循环,、,
霸王计划制定了这么久 为什么最后被海王星所替代
听起来好像有道理,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倍(未来或更强)揭秘越战老兵不敢说的秘密,越南女兵不穿内衣战场用美人计
人造肉替代动物肉送上餐桌,你吃吗?
美国农业部和食品药品管理局(FDA)近日也宣布:他们将联合对这种肉类的生产进行监督,以便其可以被安全地出售给全国各地的消费者。
目前,人造肉产品分为两类: 一类是完全从植物中提取制成,如知名的Beyond Meat和Impossible Foods。
这些人造肉产品已经在北美大量上市。
另一类为动物干细胞培育的“干净肉”。
原理是从活的动物身上提取细胞,进行人工细胞繁殖,最终转化为“肉”。
实验室培育出人造肉,首先需要进行活检: 也就是从一只动物身上提取一块组织或器官——通常是用针,获得干细胞,然后将干细胞放入培养皿中繁殖,得到肌肉组织。
这样做,能消除对培育和屠宰动物的需求。
要知道,仅在北美,每年就有大约90亿只鸡和3200万头牛被宰杀。
其次,农业尤其是肉类生产,是温室气体排放的主要来源。
如果实验室培育肉类技术能够成功推广,不仅能够避免人类大规模的屠杀,还能避免动物养殖业中抗生素、激素等化学品的滥用,食用肉类的卫生隐患等问题。
最后,联合国预计世界人口将在2050年达到90亿,而联合国粮农组织估计,维持目前的肉类饮食,全世界粮食产量必须增加60%才能养活这么多人。
在地球资源已经被过度利用的今天,增产60%的粮食产量不太现实。
无论植物提取的人造肉,还是动物肝细胞培养的“干净肉”,对于地球资源的消耗都比生产肉类小的多,或将成为保障粮食安全的重要手段。
而且利用最新科技研制出的人造肉产品,在营养配比上更为均衡,比传统的肉类食品更具有优势。
市场研究公司 Markets and Markets数据显示: 全球肉类替代品市场将稳步增长,预计从2018年的约46亿美元增长到2023年的64亿美元。
这一增长主要因为全球消费者越来越关注的健康问题,其中包括食用肉类导致的肥胖和糖尿病等问题。
在今天人造肉初创企业的身后,可以看到许多大型传统食品企业的影子。
全球最大的肉制品公司Tyson Foods早已砸下1.5亿美金投资人造肉公司,对象包括著名的“干净肉”公司Memphis meat,和植物人造肉公司Beyond Meat。
其他食品巨头如General Mill、Kellogg、Campbell也不甘落后,纷纷投资人造肉初创企业。
甚至还引来包括微软创始人比尔·盖茨、PayPal创始人彼得·泰尔以及香港超级富豪李嘉诚等在内的知名投资者。
大型食品企业的介入让我们侧面看清楚人造肉将来的广阔前景,可以预见随着人造肉的普及,这些传统食品企业的肉制品将慢慢被人造肉产品替代。
但迄今为止,这些人造肉产品如何从实验室走向消费者的菜篮子,并最终被端上餐桌,一直面临如何监管的问题。
不过,11月16日,美农业部与FDA正式就实验室制造出来的肉类产品的商业化制定了规则框架,这在全球尚属首次。
人造肉想短期内端上餐桌,价格及口味都是需要考虑的问题。
2013年,波斯特创造出的第一块人造牛排的生产成本高达25万欧元(约合200万元人民币)。
法国全国农艺研究所研究主管让-弗朗索瓦奥凯特表示: “虽然成本肯定会大幅下降,但那也很难进入到工业阶段,除非取得技术突破。
” 不仅如此,是否还有肉味这也是需要面对的问题。
据北美媒体报道: 有人大概享受了2秒钟肉食的错觉后,从咀嚼中很快清醒过来:豌豆蛋白的肉,嚼着没有真实肉类的韧性。
当然,网络上也不乏如下正面反馈 对于中国来说,至少到目前为止,国外对我国“人造肉”市场充满了乐观态度。
根据国际贸易中心的数据,2016年我国肉类的进口价值超过100亿美元,这也意味着肉类替代品在华有巨大的市场空间。
我们已经认识到人造肉的广泛前景。
据美“石英”财经网报道: 我国在去年与以色列签署一项协议,帮助以色列的高科技“人造肉”企业有机会进入我国市场。
很多企业家预测,在未来5年,人造肉和“干净肉”会大量进入市场,并在十年之内在价格上对传统肉类产生竞争力。
届时,你会购买这些口感和味道都接近肉类的人造肉产品吗? 随机文章诸葛亮舌战群儒概括与读书笔记比司马懿还会忍!他差点被司马炎杀掉起兵就灭了西晋声名狼藉的女力先锋——大法官露丝.拜德.金斯伯格金斯伯格恶魔巴尔有多少手下,统帅66地狱军团与路西法齐名多米尼加神奇的沸水湖,世界唯一常年沸腾湖水(湖边温度高达90)