array.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 IntersectionRate(a, b []int) float64 {
  32. setA := make(map[int]bool)
  33. setB := make(map[int]bool)
  34. intersection := make(map[int]bool)
  35. // 将 a 切片中的元素添加到 setA
  36. for _, value := range a {
  37. setA[value] = true
  38. }
  39. // 将 b 切片中的元素添加到 setB,并检查是否也在 setA 中
  40. for _, value := range b {
  41. setB[value] = true
  42. if setA[value] {
  43. intersection[value] = true
  44. }
  45. }
  46. // 计算交集大小
  47. intersectionSize := len(intersection)
  48. maxSize := len(a)
  49. if maxSize == 0 {
  50. return 0.0 // 避免除以零的情况
  51. }
  52. rate := float64(intersectionSize) / float64(maxSize)
  53. return rate
  54. }
  55. // UnionOfSubarrays 计算二维数组中所有子数组的并集
  56. func UnionOfSubArrays(arr [][]int) []int {
  57. // 使用 map 来存储唯一的元素
  58. elementSet := make(map[int]struct{})
  59. // 遍历二维数组
  60. for _, subarray := range arr {
  61. for _, num := range subarray {
  62. elementSet[num] = struct{}{}
  63. }
  64. }
  65. // 将 map 中的键提取为切片
  66. result := make([]int, 0, len(elementSet))
  67. for num := range elementSet {
  68. result = append(result, num)
  69. }
  70. return result
  71. }