栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有没有一种方法可以编写通用代码来确定切片中是否包含Go中的特定元素?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有没有一种方法可以编写通用代码来确定切片中是否包含Go中的特定元素?

您可以使用进行此操作

reflect
,但它比非泛型等效函数要 得多:

func Contains(slice, elem interface{}) bool {    sv := reflect.ValueOf(slice)    // Check that slice is actually a slice/array.     // you might want to return an error here    if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array {        return false    }    // iterate the slice    for i := 0; i < sv.Len(); i++ {        // compare elem to the current slice element        if elem == sv.Index(i).Interface() { return true        }    }    // nothing found    return false}func main(){    si := []int {3, 4, 5, 10, 11}    ss := []string {"hello", "world", "foo", "bar"}    fmt.Println(Contains(si, 3))    fmt.Println(Contains(si, 100))    fmt.Println(Contains(ss, "hello"))    fmt.Println(Contains(ss, "baz"))}

慢多少? 大约慢x50-x60 :对以下形式的非泛型函数进行基准测试:

func ContainsNonGeneic(slice []int, elem int) bool {    for _, i := range slice {        if i == elem { return true        }    }    return false}

我越来越:

  • 通用:
    N=100000, running time: 73.023214ms 730.23214 ns/op
  • 非通用:
    N=100000, running time: 1.315262ms 13.15262 ns/op


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484205.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号