проверка элемента присутствия в срезах GO
В Go Slice не включает в себя метод, такой как slice.contains (Object) для определения наличия элемента. Вместо этого общее решение заключается в том, чтобы итерация через каждый элемент для проведения поиска.
альтернативные подходы:
пользовательский метод:
создание пользовательского slice.contains (). Импорт "FMT" func main () { Slice: = [] int {1, 2, 3} Если SliceContains (Slice, 2) { fmt.println ("Содержит") } еще { fmt.println ("не содержит") } } func slicecontains (slice [] int, object int) bool { для _, v: = range slice { Если v == Object { вернуть правду } } вернуть ложь }
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 }Birary Search:
, как это было предложено MKB, используя бинарный алгоритм поиска сортировки сортировки. импорт ( "FMT" "Сорт" ) func main () { Slice: = [] int {1, 2, 3} sort.ints (slice) index: = sort.searchints (slice, 2) Если index! = len (slice) { fmt.println ("Содержит") } еще { fmt.println ("не содержит") } }
]
с использованием карты: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") } }
] Если ожидаются многочисленные проверки на существование, используя карту в качестве альтернативы среза, обеспечивает более эффективное решение. main main импорт ( "FMT" "синхронизация" ) func main () { Slice: = [] int {1, 2, 3} m: = make (map [int] struct {}, len (slice)) для _, v: = range slice { m [v] = struct {} {} } Если _, существует: = m [2]; существует { fmt.println ("Содержит") } еще { fmt.println ("не содержит") } }
В этом сценарии карта [String] struct {} часто используется для наборов из -за его оптимизированного типа внутренней карты для таких значений.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3