You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

lo.go 1.7 kB

1 year ago
11 months ago
11 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package lo2
  2. import (
  3. "github.com/samber/lo"
  4. "gitlink.org.cn/cloudream/common/utils/math2"
  5. )
  6. func Remove[T comparable](arr []T, item T) []T {
  7. index := lo.IndexOf(arr, item)
  8. if index == -1 {
  9. return arr
  10. }
  11. return RemoveAt(arr, index)
  12. }
  13. func RemoveAll[T comparable](arr []T, item T) []T {
  14. return lo.Filter(arr, func(i T, idx int) bool {
  15. return i != item
  16. })
  17. }
  18. func RemoveAt[T any](arr []T, index int) []T {
  19. if index >= len(arr) {
  20. return arr
  21. }
  22. return append(arr[:index], arr[index+1:]...)
  23. }
  24. func RemoveRange[T any](arr []T, start int, length int) []T {
  25. if start >= len(arr) {
  26. return arr
  27. }
  28. length = math2.Min(len(arr), start+length) - start
  29. copy(arr[start:], arr[start+length:])
  30. return arr[:len(arr)-length]
  31. }
  32. func RemoveAllDefault[T comparable](arr []T) []T {
  33. var def T
  34. return lo.Filter(arr, func(i T, idx int) bool {
  35. return i != def
  36. })
  37. }
  38. func Clear[T comparable](arr []T, item T) {
  39. var def T
  40. for i := 0; i < len(arr); i++ {
  41. if arr[i] == item {
  42. arr[i] = def
  43. }
  44. }
  45. }
  46. func ArrayClone[T any](arr []T) []T {
  47. return append([]T{}, arr...)
  48. }
  49. func Insert[T any](arr []T, index int, item T) []T {
  50. arr = append(arr, item)
  51. copy(arr[index+1:], arr[index:])
  52. arr[index] = item
  53. return arr
  54. }
  55. func Deref[T any](arr []*T) []T {
  56. result := make([]T, len(arr))
  57. for i := 0; i < len(arr); i++ {
  58. result[i] = *arr[i]
  59. }
  60. return result
  61. }
  62. func AppendNew[T any](arr []T, items ...T) []T {
  63. narr := make([]T, 0, len(arr)+len(items))
  64. narr = append(narr, arr...)
  65. narr = append(narr, items...)
  66. return narr
  67. }
  68. func ArrayEquals[T comparable](arr1, arr2 []T) bool {
  69. if len(arr1) != len(arr2) {
  70. return false
  71. }
  72. for i := 0; i < len(arr1); i++ {
  73. if arr1[i] != arr2[i] {
  74. return false
  75. }
  76. }
  77. return true
  78. }