是否有类似于切片的内容。在Go中包含(object)
方法,而不必搜索片中的每个元素?
如果您的切片已排序或您愿意对其进行排序,则排序包将提供构建块。
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
}
SearchString
promise在x不存在时返回插入x的索引(可能是len(a)),因此对该索引的检查将显示该字符串是否包含已排序的片段。
不,这样的方法不存在,但编写起来很简单:
func contains(s []int, e int) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
如果查找是代码的重要组成部分,您可以使用地图,但是地图也有成本。
Mostafa已经指出这种方法编写起来很简单,mkb给了您一个使用排序包中的二进制搜索的提示。但是,如果你要做很多这样的包含检查,你也可以考虑使用地图代替。
通过使用值检查特定的map键是否存在是很简单的,ok:=your map[key]
习惯用法。由于您对该值不感兴趣,您还可以创建一个map[string]struct{}
。这里使用空struct{}
的优点是它不需要任何额外的空间,Go的内部映射类型针对此类值进行了优化。因此,map[string]struct{}
是Go世界中集合的流行选择。
问题内容: 有没有类似于Go中的方法的东西,而不必搜索切片中的每个元素? 问题答案: Mostafa已经指出,编写这种方法很简单,而mkb为您提供了使用sort包中的二进制搜索的提示。但是,如果要进行很多此类包含检查,则还可以考虑使用地图。 使用惯用语检查特定的映射键是否存在很简单。由于您对值不感兴趣,因此也可以创建一个例如。在此处使用空值的优点是不需要任何额外的空间,并且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)时间。这适用于所有语言。 如果您打算一遍又一遍地进