如何打破嵌套的foreach循环然后转到c#上的父foreach循环

     2023-02-22     105

关键词:

【中文标题】如何打破嵌套的foreach循环然后转到c#上的父foreach循环【英文标题】:How to break nested foreach loop then go to parent foreach loop on c# 【发布时间】:2013-07-09 13:47:31 【问题描述】:

我有以下代码:

foreach(// Some condition here)

    while (// Some condition here)
    
        foreach (// Some condition here)
        
             if (// Condition again)
             
                  //Do some code
             
             if (// Condition again)
             
                 //Stop the first foreach then go back to first foreach
             
        
    

我想要做的是,当我在最后一个 foreach 循环上点击第二个 if 语句时,是在第一个 foreach 循环上返回。

注意:如果第二个if 语句不为真,它应该继续最后一个foreach 循环,直到条件不为真。

提前致谢!

【问题讨论】:

放入一个方法并返回 在我看来像一个递归函数.. 不会break; 帮忙吗? @rapsalands break 只会退出当前循环,在这种情况下是最里面的foreach。 OP想要退出两个内部循环,即最里面的foreachwhile 【参考方案1】:

直接解决此问题的唯一方法是使用goto

另一个(更好的)选择是重组直到问题消失。例如,通过将内部代码(while + foreach)放入方法中并使用 return 返回。

【讨论】:

就像一个注释,我的老大学讲师明确表示他会让任何使用 goto 的人失败:) 我认为我应该做第二个选项,我应该将 while 和 foreach 放在一个新方法上。感谢您的建议! @Sayse 那位讲师是个白痴。举个简单的例子,在 C uses gotos 中进行清理的惯用方式。由于对 goto 的偏见,各种 C 邮件列表上的新程序员都会尝试反对它,然后有人必须解释为什么存在这个习语。 我不喜欢 goto 的。在教学生时,避免使用它们是一个好方法。重点是让他们学会使用正确的循环结构并思考程序流程。经过几年的实践,开发人员学会了一种风格并知道什么时候使用 goto 是合适的。叫老师的名字也没有用。 想一想,我们早期有一个 C 语言老师,他让任何使用 return 语句中间函数的人都失败了),这使得代码更难看,但绝对教会了我们逻辑。我想我可以肯定地说,当 C# 带有 yield 声明时,他死于心脏病发作。【参考方案2】:

类似这样的:

resetLoop = false;
for(// Some condition here)

    while (// Some condition here)
    
        foreach (// Some condition here)
        
             if (// Condition again)
             
                  //Do some code
             
             if (// Condition again)
             
                 //Stop the first foreach then go back to first foreach
                 resetLoop = true;
                 break;
             
        
        if (resetLoop) break;
    
    if (resetLoop) 
        // Reset for loop to beginning
        // For example i = 0;
    

【讨论】:

我发布了相同的代码,最好的服务,感谢你。但出于对所有神圣事物的热爱,请在您的代码前加上//Here be dragons,这样新手编码人员就不会认为这是正确的编码方式【参考方案3】:

还没有人提到它(Henk 简要提到过),但最好的方法是将你的循环移动到它自己的方法中并使用 return

public ReturnType Loop(args)

foreach outerloop
    foreach innerLoop
       if(Condition)
          return;

【讨论】:

【参考方案4】:

我看到你接受了这个人提到你的 goto 语句的答案,在现代编程和专家意见中 goto 是一个杀手,我们称它为编程中的杀手,有一些特定的原因,我不会讨论此时就到这里了,但是您的问题的解决方案非常简单,您可以在这种情况下使用布尔标志,就像我将在我的示例中演示的那样:

foreach(// Some condition here)

    //solution
    bool breakme = false;

    while (// Some condition here)
    
        foreach (// Some condition here)
        
            if (// Condition again)
            
                //Do some code
            
            if (// Condition again)
            
                //Stop the first foreach then go back to first foreach
                breakme = true;
                break;
            
        
    
    if(breakme)
    
        break;
    

简单明了。 :)

【讨论】:

感谢您的回答。但是,如果您阅读了我对该答案的评论,我会遵循他的第二个建议,即把它放在一个新方法上。 :) 很高兴...我没有阅读您的评论,没关系,我告诉了您我的建议,现在由您决定... :)【参考方案5】:

正如我之前所说,我还建议重构代码,看看是否绝对有必要让 3 个循环相互嵌套。 如果是,并且我认为其中涉及一些逻辑,您应该考虑拆分为子函数(如建议的那样)

对于一个简单的代码解决方案:

foreach(// Some condition here)

    var broke = false;
    while (// Some condition here)
    
        foreach (// Some condition here)
        
             if (// Condition again)
             
                  //Do some code
             
             if (// Condition again)
             
                 //Stop the first foreach then go back to first foreach
                 broke = true;
                 break;
             
        
        if (broke) break;
        // continue your while loop
    

【讨论】:

【参考方案6】:
var broken = false;
foreach(// Some condition here)

    broken = false;
    while (!broken && // Some condition here)
    
        foreach (// Some condition here)
        
             if (// Condition again)
             
                 //Do some code
             
             if (// Condition again)
             
                 //Stop the first foreach then go back to first foreach
                 broken = true;
                 break;
             
        
    

【讨论】:

如何打破 Java 中的嵌套循环?

】如何打破Java中的嵌套循环?【英文标题】:HowdoIbreakoutofnestedloopsinJava?【发布时间】:2009-05-2009:07:43【问题描述】:我有一个这样的嵌套循环结构:for(Typetype:types)for(Typet:types2)if(somecondition)//Dosomethingandbreak...break;//Breaksoutoftheinne... 查看详情

如何在 laravel 刀片视图中打破 foreach 循环?

】如何在laravel刀片视图中打破foreach循环?【英文标题】:Howtobreakaforeachloopinlaravelbladeview?【发布时间】:2017-12-2415:56:20【问题描述】:我有一个这样的循环:@foreach($dataas$d)@if(condition==true)$d//HereIwanttobreaktheloopinaboveconditiontrue.@endi... 查看详情

如何打破 Objective-C 中的两个嵌套 for 循环?

】如何打破Objective-C中的两个嵌套for循环?【英文标题】:HowcanIbreakoutoftwonestedforloopsinObjective-C?【发布时间】:2010-10-2604:16:25【问题描述】:我有两个这样嵌套的for循环:for(...)for(...)我知道有一个break声明。但是我很困惑它是打... 查看详情

如何打破 Dart 中的嵌套循环

】如何打破Dart中的嵌套循环【英文标题】:HowtobreakoutofnestedloopsinDart【发布时间】:2022-01-1421:15:38【问题描述】:给定以下嵌套循环:for(inti=0;i<10;i++)for(varj=0;j<10;j++)print(\'i:$i,j:$j\');如果我在内部循环中添加break语句:for(inti=... 查看详情

如何在 TypeScript 中打破 ForEach 循环

】如何在TypeScript中打破ForEach循环【英文标题】:HowtobreakForEachLoopinTypeScript【发布时间】:2019-01-1518:15:33【问题描述】:我有以下代码,在某些情况下我无法打破循环。isVoteTally():booleanletcount=false;this.tab.committee.ratings.forEach(element=... 查看详情

交替循环嵌套的foreach循环(代码片段)

我试图从一个foreach循环打印一个值。然后转到另一个foreach循环并继续直到两个数组中的最后一个元素。@list=(10,20,30,40,50);@list1=(15,25,35,45,55);OUTER:foreach$a(@list)print"valueofa:$a";foreach$b(@list1)print"valueofb:$b";nextOUTER;这将从第二个foreach循... 查看详情

如何跳过“foreach”循环的迭代?

】如何跳过“foreach”循环的迭代?【英文标题】:HowdoIskipaniterationofa`foreach`loop?【发布时间】:2010-10-1320:06:24【问题描述】:在Perl中,我可以使用next;命令跳过foreach(或任何循环)迭代。有没有办法跳过一个迭代并跳转到C#中的... 查看详情

中断内部 foreach 循环并继续外部 foreach 循环

】中断内部foreach循环并继续外部foreach循环【英文标题】:Breakinnerforeachloopandcontinueouterforeachloop【发布时间】:2011-11-1714:17:10【问题描述】:如果我有一个嵌套的foreach循环,我该如何打破内循环并告诉外循环在该点继续,而不在... 查看详情

我如何打破 foreach 语句,回显其他内容然后继续

】我如何打破foreach语句,回显其他内容然后继续【英文标题】:Howcanibreakaforeachstatement,echosomethingelseandthencontinue【发布时间】:2012-09-0210:33:20【问题描述】:我从MSQL数据库中获取了两个不同的数组数据数组,第一个数组来自我... 查看详情

如何在 R 中嵌套 foreach 循环的内循环和外循环之间添加代码

】如何在R中嵌套foreach循环的内循环和外循环之间添加代码【英文标题】:HowcanIaddcodebetweentheinnerandouterloopsofnestedforeachloopsinR【发布时间】:2021-08-0607:39:15【问题描述】:我了解到在R中执行嵌套foreach循环的正确方法是通过嵌套运... 查看详情

如何从嵌套的 ForEach 循环中获取连续的索引号?

】如何从嵌套的ForEach循环中获取连续的索引号?【英文标题】:HowtogetcontinuousindexnumbersfromnestedForEachloop?【发布时间】:2021-11-1716:58:57【问题描述】:我正在为我的小部件扩展使用4块网格。我想用一组元素填充这些网格。letexampl... 查看详情

c#减少嵌套循环(代码片段)

...真的非常影响性能。当然,除了关注明显的循环例如for、foreach,还应该关注隐晦一点的循环,例如datatable.select(),linq之类的list.where、list.find等。要优化,排除业务问题,要考虑的就是代码技术了。看到循环查找数据,尽可能向... 查看详情

c#网页之间的跳转语句

...用它跳出某个case语句。实际上,break也可以用于退出for、foreach、while或do…while循环,循环结束后,就执行循环后面的语句。  如果该语句放在嵌套的循环中,就执行最内部循环后面的语句。如果break放在switch语句或循环外部,... 查看详情

如何在 C# 中连接由 foreach 循环大写的文本?

】如何在C#中连接由foreach循环大写的文本?【英文标题】:HowcanIconcatenateatextcapitalizedbyaforeachloopinC#?【发布时间】:2022-01-2319:11:45【问题描述】:usingSystem;classProgrampublicstaticvoidMain(string[]args)stringText="thesentencewhicheachwordmustbecap 查看详情

打破 JavaScript 中嵌套循环的最佳方法是啥?

】打破JavaScript中嵌套循环的最佳方法是啥?【英文标题】:What\'sthebestwaytobreakfromnestedloopsinJavaScript?打破JavaScript中嵌套循环的最佳方法是什么?【发布时间】:2010-09-1600:55:29【问题描述】:在Javascript中打破嵌套循环的最佳方法... 查看详情

有啥办法可以打破 foreach 循环?

】有啥办法可以打破foreach循环?【英文标题】:Isthereanywaytobreakoutofaforeachloop?有什么办法可以打破foreach循环?【发布时间】:2013-04-1109:16:46【问题描述】:我正在使用R包foreach()和%dopar%并行进行长时间(~天)计算。如果其中一... 查看详情

打破parallel.foreach?

】打破parallel.foreach?【英文标题】:Breakparallel.foreach?【发布时间】:2012-09-1606:25:53【问题描述】:如何跳出parallel.for循环?我有一个非常复杂的语句,如下所示:Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(),newAction<Color... 查看详情

打破R中的嵌套循环

】打破R中的嵌套循环【英文标题】:BreakingoutofnestedloopsinR【发布时间】:2016-09-3023:04:11【问题描述】:非常简单的示例代码(仅供演示,完全没用):repeatwhile(1>0)for(iinseq(1,100))break#usuallytiedtoaconditionbreakbreakprint("finished")我想... 查看详情