当前位置: 首页 > 知识库问答 >
问题:

包含切片的方法

齐承泽
2023-03-14

是否有类似于切片的内容。在Go中包含(object)方法,而不必搜索片中的每个元素?

共有3个答案

丁曦
2023-03-14

如果您的切片已排序或您愿意对其进行排序,则排序包将提供构建块。

input := []string{"bird", "apple", "ocean", "fork", "anchor"}
sort.Strings(input)

fmt.Println(contains(input, "apple")) // true
fmt.Println(contains(input, "grow"))  // false

...

func contains(s []string, searchterm string) bool {
    i := sort.SearchStrings(s, searchterm)
    return i < len(s) && s[i] == searchterm
}

SearchStringpromise在x不存在时返回插入x的索引(可能是len(a)),因此对该索引的检查将显示该字符串是否包含已排序的片段。

况胡媚
2023-03-14

不,这样的方法不存在,但编写起来很简单:

func contains(s []int, e int) bool {
    for _, a := range s {
        if a == e {
            return true
        }
    }
    return false
}

如果查找是代码的重要组成部分,您可以使用地图,但是地图也有成本。

鱼渝
2023-03-14

Mostafa已经指出这种方法编写起来很简单,mkb给了您一个使用排序包中的二进制搜索的提示。但是,如果你要做很多这样的包含检查,你也可以考虑使用地图代替。

通过使用值检查特定的map键是否存在是很简单的,ok:=your map[key]习惯用法。由于您对该值不感兴趣,您还可以创建一个map[string]struct{}。这里使用空struct{}的优点是它不需要任何额外的空间,Go的内部映射类型针对此类值进行了优化。因此,map[string]struct{}是Go世界中集合的流行选择。

 类似资料:
  • 是否有类似于方法,而不必搜索片中的每个元素?

  • 我试图拦截所有在其包名中包含特定单词的类...如下所示: 我要拦截包中的所有类: 简而言之,我想拦截属于 我正努力让这项工作从过去的许多天。

  • 我解决了以下提供的协同问题。 给出了一个整数M和一个由N个非负整数组成的非空数组A。数组A中的所有整数都小于或等于M。 一对整数(P, Q),使得0≤P≤Q 例如,考虑整数M=6和数组A,这样: 目标是计算不同切片的数量。 编写函数: 类解决方案{公共int解决方案(int M,int[]A);} 如果给定一个整数M和一个由N个整数组成的非空数组a,则返回不同的片数。 如果不同切片的数量大于1,0

  • 问题内容: 我有一个字符串,例如: 其中(逗号)将始终是最后一个字符的第三个字符,也就是。 我正在考虑删除’,’的方法,但只能考虑将字符串转换为列表,将其删除,然后将其转换回字符串。但是,对于简单任务而言,这似乎有点过多。 如何以更简单的方式完成此任务? 问题答案: 通常,您只需执行以下操作: 该给你一个字符串,最多,但不包括你要删除的逗号()和给你另一个字符串开始一个字符超出了逗号()。 然后,

  • 我有一个活动,它包含一个片段容器(FrameLayout),我在Activity.onCreate()期间在其中放置了一个片段。片段包含一个包含一串片段的ViewPager。所有这些工作都很好。页面内容显示,我可以很好地在页面中滑动,甚至可以看到操作栏中的操作,因为贡献的页面变得可见。 现在我用另一个片段替换包含ViewPager的片段: 此外,我已经用FragmentPagerAdapter替换

  • 问题内容: 检查字符串切片中是否存在某个值的最佳方法是什么?我会用其他语言的Set,但Go没有。 到目前为止,我最好的尝试是: http://play.golang.org/p/gkwMz5j09n 对于小切片,此解决方案应该可以,但是对于包含许多元素的切片,该怎么办? 问题答案: 如果您具有任意顺序的字符串切片,则查找切片中是否存在值需要O(n)时间。这适用于所有语言。 如果您打算一遍又一遍地进