emm*_*dee 0 boolean sum go boolean-operations
在这种情况下,我有3个布尔变量(已经设置为true或false)
这里的目标是确定是否一组布尔变量中的一个以上设置为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{}语句,我总是标记我的逻辑,所以我想问一下天才,你将如何做到这一点。
识别一组布尔变量是否设置为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)