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中文网其他相关文章!