通过使用值的 slice 作为带有 switch 语句的 case 来匹配一个值

标签 go switch-statement slice matching

我知道您可以通过用逗号分隔值来将多个值与 switch 语句匹配:

func main() {
    value := 5
    switch value{
    case 1,2,3:
        fmt.Println("matches 1,2 or 3")
    case 4,5, 6:
        fmt.Println("matches 4,5 or 6")
    }
}

http://play.golang.org/p/D_2Zp8bW5M

我的问题是,你能否通过使用多个值的 slice 作为 case(s) 来将多个值与 switch 语句匹配?我知道这可以通过使用 if else 语句和“Contains(slice, element)”函数来完成,我只是想知道它是否可能。

也许是这样的?

func main() {
    value := 5

    low := []int{1, 2, 3}
    high := []int{4, 5, 6}

    switch value {
    case low:
        fmt.Println("matches 1,2 or 3")
    case high:
        fmt.Println("matches 4,5 or 6")
    }
}

最佳答案

你能得到的最好的可能是这个:

package main

import "fmt"

func contains(v int, a []int) bool {
    for _, i := range a {
        if i == v {
            return true
        }
    }
    return false
}

func main() {
    first := []int{1, 2, 3}
    second := []int{4, 5, 6}

    value := 5
    switch {
    case contains(value, first):
        fmt.Println("matches first")
    case contains(value, second):
        fmt.Println("matches second")
    }
}

关于通过使用值的 slice 作为带有 switch 语句的 case 来匹配一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851842/

相关文章:

c++ - 为什么 case 语句只接受常量?

C# 开关 : case not falling through to other cases limitation

python - 根据值或列表的变化切片 python 数据框

Go 语言警告和错误

go - 如何在DynamoDB UpdateItem中更新数组对象

Java Switch 语句问题

pointers - golang slice 中的内存泄漏

arrays - 在 Go 中使用 slice 进行子集检查

python - 为什么Golang for loop比Python for loop要慢?

用于 dynamodb 的 Golang 包,支持 map 、 list 和 JSON