亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過使用值切片作為帶有 switch 語句的 case 來匹配值

通過使用值切片作為帶有 switch 語句的 case 來匹配值

Go
喵喔喔 2021-10-25 20:31:06
我知道您可以通過用逗號分隔值來將多個值與 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我的問題是,您可以通過使用多個值的切片作為 case(s) 來匹配多個值與 switch 語句嗎?我知道它可以通過使用 if else 語句和“包含(切片,元素)”函數來完成,我只是想知道它是否可能。可能是這樣的?: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")    }}
查看完整描述

3 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超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")

    }

}


查看完整回答
反對 回復 2021-10-25
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

不,由于語言規范,您不能這樣做。最簡單的方法是:

  1. 動態值使用唯一的集合(map[value]struct{})

  2. 直接在開關盒中打印靜態值


查看完整回答
反對 回復 2021-10-25
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

如果您可以控制切片,則可以改用地圖:


package main


func main() {

   var (

      value = 5

      low = map[int]bool{1: true, 2: true, 3: true}

      high = map[int]bool{4: true, 5: true, 6: true}

   )

   switch {

   case low[value]:

      println("matches 1,2 or 3")

   case high[value]:

      println("matches 4,5 or 6")

   }

}

或者如果所有數字都在 256 以下,則可以使用字節:


package main

import "bytes"


func main() {

   var (

      value = []byte{5}

      low = []byte{1, 2, 3}

      high = []byte{4, 5, 6}

   )

   switch {

   case bytes.Contains(low, value):

      println("matches 1,2 or 3")

   case bytes.Contains(high, value):

      println("matches 4,5 or 6")

   }

}


查看完整回答
反對 回復 2021-10-25
  • 3 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號