如何获得真实布尔值的“和”

emm*_*dee 0 boolean sum go boolean-operations

在这种情况下,我有3个布尔变量(已经设置为truefalse

这里的目标是确定是否一组布尔变量中的一个以上设置为true

现在,我写了以下内容,它可以正常工作:

    boolval := 0
    if *firstbool {
        boolval++
    }
    if *secondbool {
        boolval++
    }
    if *thirdbool {
        boolval++
    }
    if boolval > 1 {
        // More than 1 of the bool vars are true
    }

Run Code Online (Sandbox Code Playgroud)

如果我要写连续的if{}语句,我总是标记我的逻辑,所以我想问一下天才,你将如何做到这一点。

pet*_*rSO 6

识别一组布尔变量是否设置为true


例如,编写一个set函数:

package main

import "fmt"

func nTrue(b ...bool) int {
    n := 0
    for _, v := range b {
        if v {
            n++
        }
    }
    return n
}

func main() {
    v1, v2, v3 := true, false, true

    fmt.Println(nTrue(v1, v2, v3))

    if nTrue(v1, v2, v3) > 1 {
        // . .   .
    }
    // Or
    if n := nTrue(v1, v2, v3); n > 1 {
        // . .   .
    }
    // Or
    n := nTrue(v1, v2, v3)
    if n > 1 {
        // . .   .
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场:https : //play.golang.org/p/g3WCN6BgGly

输出:

2
Run Code Online (Sandbox Code Playgroud)

例如,范围超过设置,

package main

import "fmt"

func main() {
    v1, v2, v3 := true, false, true

    boolval := 0
    for _, v := range []bool{v1, v2, v3} {
        if v {
            boolval++
        }
    }
    if boolval > 1 {
        // . .   .
    }

    fmt.Println(boolval > 1, boolval)
}
Run Code Online (Sandbox Code Playgroud)

游乐场:https : //play.golang.org/p/R6UGb8YYEFw

输出:

true 2
Run Code Online (Sandbox Code Playgroud)

  • @Alexander Go以将底层但直接的操作留给实现者而臭名昭著。该语言的意见是,否则将隐藏这些操作的真正复杂性。 (2认同)