2 回答
TA贡献1155条经验 获得超0个赞
在 go 中,对于可以用简单循环表示的函数,以这种方式实现的惯用方式。例如,您的方法可以这样编写:
for _, value := range slice {
if value == var {
doSomething()
}
}
显然,它有点冗长,但前提是您尝试在 go 中进行翻译 language or choice here。
进行反射的缺点是,您会破坏性能,而不会比编写代码以集成到搜索中而不是简单地将其视为一个条件那么简单。
TA贡献1804条经验 获得超7个赞
如果您需要一种便宜的方法来检查这个(如果您必须经常检查),我会使用地图进行更便宜的查找。像这样:
type Foo string
var sl []string
var m map[string]int
//insert
sl = append(sl, "bar")
m["bar"] += 1
// delete ,e.g at position i
m[sl[i]] -= 1
sl[len(sl)-1], s[:len(sl)-1]
//test
if count := m["abc"]; count>0 {
// "abc" in sl
}
当然,如果您更改切片中的某些内容,两者都会增加开销。那要看你的情况了。
如果您的切片没有改变,并且您将进行大量“in”测试,您可以为此构建一个更简单的地图:
m := make(map[string]struct{}, len(sl))
for _, value := range sl {
m[value] = struct{}
}
//test
if _, ok := m["abc"]; ok {
// "abc" is in sl
}
- 2 回答
- 0 关注
- 275 浏览
添加回答
举报