在内部循环中Continue外部循环
有时候你希望在一个嵌套循环的外层循环中执行Continue操作。例如,假设你有一连串的标准,和一堆items。
并且你希望找到一个符合每个标准的item。
match = null; foreach(var item in items) { foreach(var criterion in criteria) { if (!criterion.IsMetBy(item)) //如果不符合标准 { //那么说明这个item肯定不是要查找的,那么应该在外层循环执行continue操作 } } match = item; break; }
有很多方法可以实现这个需求,这里有一些:
方法#1(丑陋的goto):使用goto语句。
match = null; foreach(var item in items) { foreach(var criterion in criteria) { if (!criterion.IsMetBy(item)) { goto OUTERCONTINUE; } } match = item; break; OUTERCONTINUE: ; }
如果不符合其中的一个标准,那么goto OUTCONTINUE:,接着检查下一个item。
方法#2(优雅,漂亮):
当你看到一个嵌套循环,基本上你总是可以考虑将内部的循环放到一个它自己的方法中:
match = null; foreach(var item in items) { if (MeetsAllCriteria(item, critiera)) { match = item; break; } }
MeetsAllCriteria方法的内部很明显应该是
foreach(var criterion in criteria) if (!criterion.IsMetBy(item)) return false; return true;
方法#3,使用标志位:
match = null; foreach(var item in items) { foreach(var criterion in criteria) { HasMatch=true; if (!criterion.IsMetBy(item)) { // No point in checking anything further; this is not // a match. We want to “continue” the outer loop. How? HasMatch=false; break; } } if(HasMatch) { match = item; break; } }
方法#4,使用Linq。
var matches = from item in items where criteria.All( criterion=>criterion.IsMetBy(item)) select item; match = matches.FirstOrDefault();
对于在items中的每个item,都检查是否满足所有的标准。
原文链接:Continuing to an outer loop
作者:LoveJenny
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架