Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

types.go 1019B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright (c) 2020 Shivaram Lingamneni
  2. // released under the MIT license
  3. package utils
  4. type empty struct{}
  5. type HashSet[T comparable] map[T]empty
  6. func (s HashSet[T]) Has(elem T) bool {
  7. _, ok := s[elem]
  8. return ok
  9. }
  10. func (s HashSet[T]) Add(elem T) {
  11. s[elem] = empty{}
  12. }
  13. func (s HashSet[T]) Remove(elem T) {
  14. delete(s, elem)
  15. }
  16. func SetLiteral[T comparable](elems ...T) HashSet[T] {
  17. result := make(HashSet[T], len(elems))
  18. for _, elem := range elems {
  19. result.Add(elem)
  20. }
  21. return result
  22. }
  23. func CopyMap[K comparable, V any](input map[K]V) (result map[K]V) {
  24. result = make(map[K]V, len(input))
  25. for key, value := range input {
  26. result[key] = value
  27. }
  28. return
  29. }
  30. // reverse the order of a slice in place
  31. func ReverseSlice[T any](results []T) {
  32. for i, j := 0, len(results)-1; i < j; i, j = i+1, j-1 {
  33. results[i], results[j] = results[j], results[i]
  34. }
  35. }
  36. func SliceContains[T comparable](slice []T, elem T) (result bool) {
  37. for _, t := range slice {
  38. if elem == t {
  39. return true
  40. }
  41. }
  42. return false
  43. }