为了账号安全,请及时绑定邮箱和手机立即绑定

请教打破嵌套循环

请教打破嵌套循环

C#
小唯快跑啊 2019-09-02 08:04:20
打破嵌套循环如果我有一个嵌套在另一个中的for循环,我怎么能以最快的方式有效地从两个循环(内部和外部)中出来?我不想使用布尔值,然后不得不说去另一个方法,而只是在外部循环后执行第一行代码。这是一个快速而好的方式吗?谢谢我认为异常并不便宜/应该只是在一个真正特殊的条件下抛出等等。因此,从性能的角度来看,我认为这种解决方案并不好。我觉得利用.NET(anon方法)中的新功能做一些非常基本的事情是不对的。因此,tvon(抱歉不能拼写完整的用户名!)有一个很好的解决方案。Marc:很好地使用了anon方法,这也很棒但是因为我可以在一个不使用支持anon方法的.NET / C#版本的工作中,我也需要知道一种传统的方法。
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

嗯,goto但这很难看,并不总是可能的。您还可以将循环放入方法(或anon-method)并用于return退回到主代码。

    // goto
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            goto Foo; // yeuck!
        }
    }Foo:
    Console.WriteLine("Hi");

VS:

// anon-methodAction work = delegate{
    for (int x = 0; x < 100; x++)
    {
        for (int y = 0; y < 100; y++)
        {
            return; // exits anon-method
        }
    }};work(); // execute anon-methodConsole.WriteLine("Hi");

请注意,在C#7中我们应该得到“本地函数”,其中(语法tbd等)意味着它应该工作如下:

// local function (declared **inside** another method)void Work(){
    for (int x = 0; x < 100; x++)
    {
        for (int y = 0; y < 100; y++)
        {
            return; // exits local function
        }
    }};Work(); // execute local functionConsole.WriteLine("Hi");



查看完整回答
反对 回复 2019-09-09
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

C#自适应方法经常用于C - 外部循环变量的设置值在循环条件之外(即对于循环使用int变量INT_MAX -1通常是不错的选择):

for (int i = 0; i < 100; i++){
    for (int j = 0; j < 100; j++)
    {
        if (exit_condition)
        {
            // cause the outer loop to break:
            // use i = INT_MAX - 1; otherwise i++ == INT_MIN < 100 and loop will continue 
            i = int.MaxValue - 1;
            Console.WriteLine("Hi");
            // break the inner loop
            break;
        }
    }
    // if you have code in outer loop it will execute after break from inner loop    }

正如代码中的注释所说,break不会神奇地跳转到外循环的下一次迭代 - 所以如果你有内循环之外的代码,这种方法需要更多的检查。在这种情况下考虑其他解决方案

这种方法适用于forwhile循环,但不起作用foreach。如果foreach你没有代码访问隐藏的枚举器,所以你不能改变它(即使你可能IEnumerator没有一些“MoveToEnd”方法)。

对内联评论作者的致谢: Meta的
i = INT_MAX - 1建议/ ygoe的评论。 正确的jmbpiano通过内部循环后约代码备注blizpasta 
forforeach
IntMax 



查看完整回答
反对 回复 2019-09-09
  • 2 回答
  • 0 关注
  • 243 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信