检查片断是否包含Go中的给定值的方法

90 阅读1分钟

Go并没有提供一个语言结构或标准库函数来检查一个给定的值是否在一个片断中。要做到这一点,你需要编写自己的contains() ,该函数需要两个参数:切片和要查找的元素。结果是,如果片断包含这个元素,它应该返回true ,否则返回false

package main
import "fmt"
func contains(elems []string, v string) bool {
for _, s := range elems {
if v == s {
return true
}
}
return false
}
func main() {
fmt.Println(contains([]string{"a", "b", "c"}, "b"))
fmt.Println(contains([]string{"a", "b", "c"}, "d"))
}

输出

true
false

如果你想对不同类型的片断进行操作,你必须实现一个单独的函数。例如,对于int64 ,该函数看起来像这样:

func contains(elems []int64, v int64) bool {
for _, s := range elems {
if v == s {
return true
}
}
return false
}

如果你的片断不是太大,这个函数就很好用。对于较长的数据列表,你应该考虑使用map来存储,一般来说,map的查找性能要比片断迭代好得多。

Go编程语言规范没有做出任何复杂度的保证,但一般来说,地图查找的复杂度应该是O(1),而在片断中寻找一个元素的复杂度是O(n)。