打破嵌套循环如果我有一个嵌套在另一个中的for循环,我怎么能以最快的方式有效地从两个循环(内部和外部)中出来?我不想使用布尔值,然后不得不说去另一个方法,而只是在外部循环后执行第一行代码。这是一个快速而好的方式吗?谢谢我认为异常并不便宜/应该只是在一个真正特殊的条件下抛出等等。因此,从性能的角度来看,我认为这种解决方案并不好。我觉得利用.NET(anon方法)中的新功能做一些非常基本的事情是不对的。因此,tvon(抱歉不能拼写完整的用户名!)有一个很好的解决方案。Marc:很好地使用了anon方法,这也很棒但是因为我可以在一个不使用支持anon方法的.NET / C#版本的工作中,我也需要知道一种传统的方法。
2 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
嗯,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");
波斯汪
TA贡献1811条经验 获得超4个赞
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
不会神奇地跳转到外循环的下一次迭代 - 所以如果你有内循环之外的代码,这种方法需要更多的检查。在这种情况下考虑其他解决方案
这种方法适用于for
和while
循环,但不起作用foreach
。如果foreach
你没有代码访问隐藏的枚举器,所以你不能改变它(即使你可能IEnumerator
没有一些“MoveToEnd”方法)。
对内联评论作者的致谢: Meta的i = INT_MAX - 1
建议/ ygoe的评论。 正确的jmbpiano通过内部循环后约代码备注blizpasta for
foreach
IntMax
- 2 回答
- 0 关注
- 398 浏览
添加回答
举报
0/150
提交
取消