gpt4 book ai didi

loops - 如何打破 Go 中的嵌套循环?

转载 作者:IT老高 更新时间:2023-10-28 13:08:42 24 4
gpt4 key购买 nike

我有一个外循环和内循环,每个循环都在一个范围内进行。我想在内循环内满足条件时退出外循环。

我有一个解决方案,它使用两个'break',一个在内部循环内部,一个在外部循环内部,就在内部循环外部(一个非常简化的演示案例):

package main

import (
"fmt"
)

func main() {

word := ""
for _, i := range("ABCDE") {
for _,j := range("ABCDE") {
word = string(i) + string(j)
fmt.Println(word)
if word == "DC" {
break
}
}
if word == "DC" {
break
}
}
// More logic here that needs to be executed
}

Go Playground

这个解决方案没有问题,但在我看来它只是打补丁和丑陋。有没有更好的方法来做到这一点?

我可以尝试在上一个解决方案的外循环之外再设置一个 for 条件循环,并设置一个标签并使用该标签继续。但正如您所见,这种方法并不比使用 break 的解决方案更优雅。

package main

import (
"fmt"
)

func main() {

word := ""

Exit:
for word != "DC" {
for _, i := range "ABCDE" {
for _, j := range "ABCDE" {
word = string(i) + string(j)
fmt.Println(word)
if word == "DC" {
continue Exit
}
}
}
}
// More logic here that needs to be executed
}

Go Playground

我在这里看到了与其他语言(C、C#、Python 等)有关的类似问题。但我真正感兴趣的是 Go 结构是否有任何技巧,例如“for select”。

最佳答案

使用 break {label} 可以根据需要跳出任何嵌套的循环。只需将标签 放在要跳出的 for 循环之前。这与执行 goto {label} 的代码非常相似,但我认为更优雅一些,但我猜是意见问题。

package main

func main() {
out:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i + j == 20 {
break out
}
}
}
}

更多详情:https://www.ardanlabs.com/blog/2013/11/label-breaks-in-go.html

关于loops - 如何打破 Go 中的嵌套循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com