golang 通用Contains方法

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

今天在群裡看見有人寫了一個InAarry方法,主要作用是判斷一個元素是否在slice中,看完後,我感覺方法應該還有擴充的空間

於是自己重新寫了一個Contains方法,可以支援 slice,array,map等類型

 

package mainimport (    "errors"    "fmt"    "reflect")// 判斷obj是否在target中,target支援的類型arrary,slice,mapfunc Contain(obj interface{}, target interface{}) (bool, error) {    targetValue := reflect.ValueOf(target)    switch reflect.TypeOf(target).Kind() {    case reflect.Slice, reflect.Array:        for i := 0; i < targetValue.Len(); i++ {            if targetValue.Index(i).Interface() == obj {                return true, nil            }        }    case reflect.Map:        if targetValue.MapIndex(reflect.ValueOf(obj)).IsValid() {            return true, nil        }    }    return false, errors.New("not in array")}func main() {    testMap()    testArray()    testSlice()}func testArray() {    a := 1    b := [3]int{1, 2, 3}    fmt.Println(Contain(a, b))    c := "a"    d := [4]string{"b", "c", "d", "a"}    fmt.Println(Contain(c, d))    e := 1.1    f := [4]float64{1.2, 1.3, 1.1, 1.4}    fmt.Println(Contain(e, f))    g := 1    h := [4]interface{}{2, 4, 6, 1}    fmt.Println(Contain(g, h))    i := [4]int64{}    fmt.Println(Contain(a, i))}func testSlice() {    a := 1    b := []int{1, 2, 3}    fmt.Println(Contain(a, b))    c := "a"    d := []string{"b", "c", "d", "a"}    fmt.Println(Contain(c, d))    e := 1.1    f := []float64{1.2, 1.3, 1.1, 1.4}    fmt.Println(Contain(e, f))    g := 1    h := []interface{}{2, 4, 6, 1}    fmt.Println(Contain(g, h))    i := []int64{}    fmt.Println(Contain(a, i))}func testMap() {    var a = map[int]string{1: "1", 2: "2"}    fmt.Println(Contain(3, a))    var b = map[string]int{"1": 1, "2": 2}    fmt.Println(Contain("1", b))    var c = map[string][]int{"1": {1, 2}, "2": {2, 3}}    fmt.Println(Contain("6", c))}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.