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

 更新时间:2013年05月14日 10:12:40   作者:  
本篇文章是对在内部循环中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,都检查是否满足所有的标准。

相关文章

  • c# wpf如何使用Blend工具绘制Control样式

    c# wpf如何使用Blend工具绘制Control样式

    这篇文章主要介绍了c# wpf如何使用Blend工具绘制Control样式,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#中的数组作为参数传递所引发的问题

    C#中的数组作为参数传递所引发的问题

    这篇文章主要介绍了C#中的数组作为参数传递所引发的问题 的相关资料,需要的朋友可以参考下
    2016-03-03
  • C# Random类随机函数实例详解

    C# Random类随机函数实例详解

    这篇文章主要为大家介绍了C# Random类随机函数实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Unity实现ScrollView滑动吸附功能

    Unity实现ScrollView滑动吸附功能

    这篇文章主要为大家详细介绍了Unity实现ScrollView滑动吸附功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • C# list<T>去重的实现

    C# list<T>去重的实现

    List集合在开发过程中很常见,经常我们要对该集合进行一系列操作,本文主要介绍了C# list<T>去重的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • C#.Net基于正则表达式抓取百度百家文章列表的方法示例

    C#.Net基于正则表达式抓取百度百家文章列表的方法示例

    这篇文章主要介绍了C#.Net基于正则表达式抓取百度百家文章列表的方法,结合实例形式分析了C#获取百度百家文章内容及使用正则表达式匹配标题、内容、地址等相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • C#操作DataTable的实现步骤

    C#操作DataTable的实现步骤

    本文主要介绍了C#操作DataTable的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C#中对称加密算法的踩坑日常记录

    C#中对称加密算法的踩坑日常记录

    这篇文章主要给大家介绍了关于C#中对称加密算法的踩坑日常记录,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • C#中ZipHelper 压缩和解压帮助类

    C#中ZipHelper 压缩和解压帮助类

    本文介绍C#实现压缩与解压缩帮助类ZipHelper,主要是通过ICSharpCode.SharpZipLib 类库实现的。
    2016-05-05
  • C#使用OpenCvSharp4库读取电脑摄像头数据并实时显示

    C#使用OpenCvSharp4库读取电脑摄像头数据并实时显示

    OpenCvSharp4库是一个基于.Net封装的OpenCV库,本文主要给大家介绍了C#使用OpenCvSharp4库读取电脑摄像头数据并实时显示的详细方法,感兴趣的朋友可以参考下
    2024-01-01

最新评论