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

无法在golang中跳出外循环

无法在golang中跳出外循环

Go
慕哥6287543 2022-06-27 10:59:58
以下是我的函数,我试图验证 ID 并且无法从内部循环返回值。func Validate(id int, tn []Node) int {    var value int    for _, j := range tn {        if id == j.ID {            println(id, j.ID)            value = j.ID            println("aa", value)            break        } else {            if j.Children != nil {                ValidateID(id, j.Children)            }        }    }    return value}
查看完整描述

1 回答

?
MMTTMM

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

看起来您想返回是否在树的任何节点中找到了 ID。您的代码几乎就在那里,但您需要检查递归调用是否找到它。使用return而不是break使代码更简单。


我删除了这些print语句,我猜它们是出于调试目的。


我还用 a 替换了返回值bool(原始代码要么返回 ID 本身,要么返回 0 表示未找到),并删除了j.Children == nil测试(代码为空切片返回 false:


// ValidateID reports whether id exists in a tree of nodes.

func ValidateID(id int, tn []Node) bool {

    for _, j := range tn {

        if id == j.ID || ValidateID(id, j.Children) {

            return true

        }

    }

    return false

}

请注意,如果您想从目标节点实际返回 bool 以外的内容,我会让函数返回两个值:您感兴趣的值和表示是否找到 ID 的 bool。"Effective Go"不鼓励依赖像 0 这样的标记值。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号