Go语言中如何优雅地封装和使用切片

发表时间: 2024-05-29 10:09

1.元素是否存在一个切片中

判断一个元素有没有在数组中, PHP使用in_array()函数, 那么在golang中, 如何判断元素是否存在一个切片中呢?

go go go, 搞一个 []string 类型的切片:

import ("strconv")func InSlice(value interface{}, list []string) bool {    switch value.(type) {    case int:    value = strconv.Itoa(value.(int)) // value.(int)表示断言:value是一个int    case uint:    value = strconv.Itoa(int(value.(uint))) // int(type)表示强类型转换:将uint转为int    case float64:    value = strconv.FormatFloat(value.(float64), 'f', -1, 64) // 将float64转为string    case float32:    value = strconv.FormatFloat(float64(value.(float32)), 'f', -1, 32) // 将float32先转为float64再转为string    }    for _, el := range list {        if el == value {        return true        }    }    return false}

2.去除切片中的空值

func FilterSlice(list []string) (result []string) {for _, value := range list {    if value != "" {    result = append(result, value)    }}return}

3. 去除切片中的重复值

func UniqueSlice(list []string) (result []string) {// 存储每个元素的数量countEle := make(map[string]int)for _, value := range list {		countEle[value] += 1    if countEle[value] > 1 {    		continue    }result = append(result, value)}return}

4. 将多个同类型切片合并成一个切片

func MergeSlice(list ...[]string) (result []string) {    for _, value := range list {        for _, v := range value {        result = append(result, v)        }    }    return}