源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

解析在内部循环中Continue外部循环的使用详解

  • 时间:2021-02-24 06:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:解析在内部循环中Continue外部循环的使用详解
有时候你希望在一个嵌套循环的外层循环中执行Continue操作。例如,假设你有一连串的标准,和一堆items。 并且你希望找到一个符合每个标准的item。
[u]复制代码[/u] 代码如下:
match = null; foreach(var item in items) {   foreach(var criterion in criteria)   {     if (!criterion.IsMetBy(item)) //如果不符合标准     {         //那么说明这个item肯定不是要查找的,那么应该在外层循环执行continue操作     }   }   match = item;   break; }
有很多方法可以实现这个需求,这里有一些: [b]方法#1(丑陋的goto):使用goto语句。 [/b]
[u]复制代码[/u] 代码如下:
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。 [b]方法#2(优雅,漂亮):[/b] 当你看到一个嵌套循环,基本上你总是可以考虑将内部的循环放到一个它自己的方法中:
[u]复制代码[/u] 代码如下:
match = null; foreach(var item in items) {   if (MeetsAllCriteria(item, critiera))   {     match = item;     break;   } }
MeetsAllCriteria方法的内部很明显应该是
[u]复制代码[/u] 代码如下:
foreach(var criterion in criteria)   if (!criterion.IsMetBy(item))     return false; return true;
[b]方法#3,使用标志位: [/b]
[u]复制代码[/u] 代码如下:
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;  } }
[b]方法#4,使用Linq。 [/b]
[u]复制代码[/u] 代码如下:
var matches = from item in items               where criteria.All(                 criterion=>criterion.IsMetBy(item))               select item; match = matches.FirstOrDefault();
对于在items中的每个item,都检查是否满足所有的标准。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部