首頁 >後端開發 >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