有没有类似于slice.contains(object)
方法,而不必搜索切片中的每个元素?
发布于 2012-05-08 01:14:16
Mostafa已经指出,这样的方法编写起来很简单,mkb给了您一个提示,让您使用排序包中的二进制搜索。但是,如果您要执行大量此类包含检查,则还可以考虑使用map。
方法来检查特定的映射键是否存在是很容易的。value, ok := yourmap[key]
习语。由于您对值不感兴趣,因此还可以创建一个map[string]struct{}
例如。使用空的struct{}
这里的优点是它不需要任何额外的空间,并且Go的内部映射类型针对这种值进行了优化。因此,map[string] struct{}
是围棋世界中流行的棋盘选择。
发布于 2012-05-08 00:56:59
不,这样的方法不存在,但写起来很简单:
func contains(s []int, e int) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
如果查找是代码的重要部分,则可以使用映射,但映射也有成本。
发布于 2019-09-20 18:46:15
The sort排序如果您的切片已排序或您希望对其进行排序,package将提供构建块。
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
承诺会回来the index to insert x if x is not present (it could be len(a))
,所以检查它会显示字符串是否包含排序后的切片。
https://stackoverflow.com/questions/10485743
复制相似问题