檢查Go 切片中的元素是否存在
在Go 中,切片本身並不包含像slice.contains(object) 這樣的方法確定元素的存在。相反,常見的解決方案是迭代每個元素來進行搜尋。
替代方法:
自訂方法:
建立自訂slice.contains() 方法是一個簡單的選項,如下所示Mostafa。
package main import "fmt" func main() { slice := []int{1, 2, 3} if sliceContains(slice, 2) { fmt.Println("Contains") } else { fmt.Println("Not contains") } } func sliceContains(slice []int, object int) bool { for _, v := range slice { if v == object { return true } } return false }
二分搜尋:
根據 mkb 的建議,利用排序包的二分搜尋演算法為大切片提供了更有效的方法。
package main import ( "fmt" "sort" ) func main() { slice := []int{1, 2, 3} sort.Ints(slice) index := sort.SearchInts(slice, 2) if index != len(slice) { fmt.Println("Contains") } else { fmt.Println("Not contains") } }
使用地圖:
如果預計會進行大量存在性檢查,則使用地圖作為切片的替代方案可提供更有效的解決方案。
package main import ( "fmt" "sync" ) func main() { slice := []int{1, 2, 3} m := make(map[int]struct{}, len(slice)) for _, v := range slice { m[v] = struct{}{} } if _, exists := m[2]; exists { fmt.Println("Contains") } else { fmt.Println("Not contains") } }
在這種情況下,地圖[string ]struct{} 經常用於集合,因為它針對此類值優化了內部映射類型。
以上是如何有效率地檢查 Go 切片中是否存在元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!