检查字符串切片中是否存在某个值的最佳方法是什么?我会用其他语言的Set,但Go没有。
到目前为止,我最好的尝试是:
package main
import "fmt"
func main() {
list := []string{"a", "b", "x"}
fmt.Println(isValueInList("b", list))
fmt.Println(isValueInList("z", list))
}
func isValueInList(value string, list []string) bool {
for _, v := range list {
if v == value {
return true
}
}
return false
}
http://play.golang.org/p/gkwMz5j09n
对于小切片,此解决方案应该可以,但是对于包含许多元素的切片,该怎么办?
如果您具有任意顺序的字符串切片,则查找切片中是否存在值需要O(n)时间。这适用于所有语言。
如果您打算一遍又一遍地进行搜索,则可以使用其他数据结构来加快查找速度。但是,构建这些结构至少需要O(n)时间。因此,只有多次使用数据结构进行查找,您才能获得好处。
例如,您可以将字符串加载到地图中。然后查找将花费O(1)时间。插入也需要O(1)时间,从而使初始构建也需要O(n)时间:
set := make(map[string]bool)
for _, v := range list {
set[v] = true
}
fmt.Println(set["b"])
您还可以对字符串切片进行排序,然后进行二进制搜索。二进制搜索发生在O(log(n))时间。建筑可能需要O(n * log(n))时间。
sort.Strings(list)
i := sort.SearchStrings(list, "b")
fmt.Println(i < len(list) && list[i] == "b")
尽管理论上给定无限数量的值,但映射会更快,但实际上,很有可能搜索排序列表会更快。您需要自己对其进行基准测试。
我正在寻找一个运算符,它允许我检查字段的值是否包含某个字符串。 比如: 可能吗?
所以我一辈子也想不出来。我正在尝试编写一个程序,提示用户输入电话号码。这将作为字符串输入,并在稍后的程序中转换为整数数组。然而,我现在遇到的情况是验证用户输入的字符串是否仅限于!!!包含2-9之间的数字。我已经尝试了。Contains方法和。Match方法,但是使用这些方法总是提供错误的结果。如果有人能提供一些关于如何解决这个问题,我将非常感谢。提前感谢。 以下是我目前掌握的信息:
问题内容: 我需要检查一个字符串是否包含汉字。搜索之后,我发现我必须在这种模式下查看正则表达式,但是我无法使正则表达式正常工作。 任何人都经历过这种情况?正则表达式正确吗? 问题答案: 作为讨论在这里,在Java 7(即正则表达式编译器符合要求RL1.2属性从UTS#18 Unicode的正则表达式 ),你可以使用下面的正则表达式匹配中国(当然,CJK)字符: 可以简单地理解为
同 find() 方法类似,index() 方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。 index() 方法的语法格式如下: str.index(sub[,start[,end]]) 此格式中各参数的含义分别是: str:表示原字符串; sub:表示要检索的子字符串; start:表示检索开始的起始位置,如果不指定,默认从头开始检
find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。 find() 方法的语法格式如下: str.find(sub[,start[,end]]) 此格式中各参数的含义如下: str:表示原字符串; sub:表示要检索的目标字符串; start:表示开始检索的起始位置。如果不指定,则默认从头开始检索; end:表示结束检索的结束位置。如
问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出: