druzuz321103
2012-11-22 21:18
采纳率: 100%
浏览 5.8k
已采纳

如何检查Go中的字符串切片是否包含某个值?

检查某个值是否在字符串片中的最佳方法是什么?我会用其他语言的集合,但是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

这个解决方案对于小片应该是可以的,但是对于有许多元素的片应该怎么做呢?

图片转代码服务由CSDN问答提供 功能建议

检查字符串切片中是否存在某个特定值的最佳方法是什么? 我会使用其他语言的Set,但是Go没有一个Set。

到目前为止,我最好的尝试是:

  包main 
 
import“ fmt” 
 
func main(){
 list:= [] string {“ a”,“ b”,“ x”} 
 fmt.Println(isValueInList(“ b”,  list))
 fmt.Println(isValueInList(“ z”,list))
} 
 
func isValueInList(值字符串,列表[]字符串)bool {
表示_,v:=范围列表{
 如果v ==值{
返回true 
} 
} 
返回false 
} 
   
 
 

http://play.golang.org/p/gkwMz5j09n

对于小规模的用户,此解决方案应该可以 切片,但是对包含许多元素的切片怎么办?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • douxun4924 2012-11-22 21:26
    已采纳

    If you have a slice of strings in an arbitrary order, finding if a value exists in the slice requires O(n) time. This applies to all languages.

    If you intend to do a search over and over again, you can use other data structures to make lookups faster. However, building these structures require at least O(n) time. So you will only get benefits if you do lookups using the data structure more than once.

    For example, you could load your strings into a map. Then lookups would take O(1) time. Insertions also take O(1) time making the initial build take O(n) time:

    set := make(map[string]bool)
    for _, v := range list {
        set[v] = true
    }
    
    fmt.Println(set["b"])
    

    You can also sort your string slice and then do a binary search. Binary searches occur in O(log(n)) time. Building can take O(n*log(n)) time.

    sort.Strings(list)
    i := sort.SearchStrings(list, "b")
    fmt.Println(i < len(list) && list[i] == "b")
    

    Although in theory given an infinite number of values, a map is faster, in practice it is very likely searching a sorted list will be faster. You need to benchmark it yourself.

    评论
    解决 1 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题