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}