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 959 B

1 year ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package lo2
  2. import "github.com/samber/lo"
  3. func Remove[T comparable](arr []T, item T) []T {
  4. index := lo.IndexOf(arr, item)
  5. if index == -1 {
  6. return arr
  7. }
  8. return RemoveAt(arr, index)
  9. }
  10. func RemoveAt[T any](arr []T, index int) []T {
  11. if index >= len(arr) {
  12. return arr
  13. }
  14. return append(arr[:index], arr[index+1:]...)
  15. }
  16. func RemoveAllDefault[T comparable](arr []T) []T {
  17. var def T
  18. return lo.Filter(arr, func(i T, idx int) bool {
  19. return i != def
  20. })
  21. }
  22. func Clear[T comparable](arr []T, item T) {
  23. var def T
  24. for i := 0; i < len(arr); i++ {
  25. if arr[i] == item {
  26. arr[i] = def
  27. }
  28. }
  29. }
  30. func ArrayClone[T any](arr []T) []T {
  31. return append([]T{}, arr...)
  32. }
  33. func Insert[T any](arr []T, index int, item T) []T {
  34. arr = append(arr, item)
  35. copy(arr[index+1:], arr[index:])
  36. arr[index] = item
  37. return arr
  38. }
  39. func Deref[T any](arr []*T) []T {
  40. result := make([]T, len(arr))
  41. for i := 0; i < len(arr); i++ {
  42. result[i] = *arr[i]
  43. }
  44. return result
  45. }