array.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package utils
  2. type BasicType interface {
  3. int | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string
  4. }
  5. func InArray[T BasicType](needle T, hystack []T) bool {
  6. for _, item := range hystack {
  7. if needle == item {
  8. return true
  9. }
  10. }
  11. return false
  12. }
  13. func SliceArray[T any](arr []T, offset int, limit int) []T {
  14. size := len(arr)
  15. if size <= offset {
  16. return []T{}
  17. } else if size > offset && size < offset+limit {
  18. return arr[offset:size]
  19. } else {
  20. return arr[offset : offset+limit]
  21. }
  22. }
  23. func ToMap[K comparable, T any](arr []T, getKey func(*T) K) map[K]T {
  24. r := make(map[K]T)
  25. for _, v := range arr {
  26. k := getKey(&v)
  27. r[k] = v
  28. }
  29. return r
  30. }
  31. // func InArray(needle interface{}, hystack interface{}) bool {
  32. // switch key := needle.(type) {
  33. // case string:
  34. // for _, item := range hystack.([]string) {
  35. // if key == item {
  36. // return true
  37. // }
  38. // }
  39. // case int:
  40. // for _, item := range hystack.([]int) {
  41. // if key == item {
  42. // return true
  43. // }
  44. // }
  45. // case int64:
  46. // for _, item := range hystack.([]int64) {
  47. // if key == item {
  48. // return true
  49. // }
  50. // }
  51. // default:
  52. // return false
  53. // }
  54. // return false
  55. // }