首页 >后端开发 >Golang >如何有效检查 Go 中的切片包含情况?

如何有效检查 Go 中的切片包含情况?

DDD
DDD原创
2024-12-22 09:21:00467浏览

How Can I Efficiently Check for Slice Containment in Go?

Go 中的切片包含检查

在 Go 中,无需迭代每个项目即可高效地查找切片中是否存在元素.

微不足道方法

正如 Mostafa 提到的,可以创建一个自定义方法来简化任务:

func SliceContains(slice []T, target T) bool {
    for _, item := range slice {
        if item == target {
            return true
        }
    }
    return false
}

二分查找

或者, mkb 建议使用 sort 包中的二分搜索。这种方法需要预先排序的切片,对于大型数据集非常有效。

sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })
idx := sort.Search(len(slice), func(i int) bool { return slice[i] == target })
contains := idx != len(slice) && slice[idx] == target

地图优化

如果需要频繁的包含检查,请使用地图而不是切片可以提供更好的性能。

type Set map[string]struct{}

func (s Set) Contains(key string) bool {
    _, ok := s[key]
    return ok
}

在映射中使用空 struct{} 值可以减少内存开销,并且优化地图性能。 Set 通常用于 Go 中类似集合的操作。

以上是如何有效检查 Go 中的切片包含情况?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn