如果没有对整个数组进行迭代,我如何使用Go检查数组中是否有x
?这种语言有构造性吗?
像Python一样:if "x" in array: ...
发布于 2013-03-10 23:36:14
在Go中没有内置的运算符。您需要遍历数组。您可以编写自己的函数来执行此操作,如下所示:
func stringInSlice(a string, list []string) bool {
for _, b := range list {
if b == a {
return true
}
}
return false
}
如果您希望能够在不遍历整个列表的情况下检查成员,则需要使用映射而不是数组或切片,如下所示:
visitedURL := map[string]bool {
"http://www.google.com": true,
"https://paypal.com": true,
}
if visitedURL[thisSite] {
fmt.Println("Already been here.")
}
发布于 2015-11-26 07:45:39
如果列表包含静态值,则另一种解决方案。
例如:检查有效值列表中的有效值:
func IsValidCategory(category string) bool {
switch category {
case
"auto",
"news",
"sport",
"music":
return true
}
return false
}
发布于 2015-10-25 05:03:52
这是从“在Go中编程:为21世纪创建应用程序”一书中的一句话:
使用像这样的简单线性搜索的
是未排序数据的唯一选择,并且对于小切片(最多数百个项)也很好。但对于较大的切片-特别是如果我们重复执行搜索-线性搜索的效率非常低,平均每次需要比较一半的项目。
Go提供了一个使用二进制搜索算法的sort.Search()方法:每次只需要比较log2(n)项(其中n是项数)。正确地说,1000000个项目的线性搜索平均需要500000个比较,最坏的情况是1000000个比较;二进制搜索最多需要20个比较,即使在最坏的情况下也是如此。
files := []string{"Test.conf", "util.go", "Makefile", "misc.go", "main.go"}
target := "Makefile"
sort.Strings(files)
i := sort.Search(len(files),
func(i int) bool { return files[i] >= target })
if i < len(files) && files[i] == target {
fmt.Printf("found \"%s\" at files[%d]\n", files[i], i)
}
https://stackoverflow.com/questions/15323767
复制相似问题