slice.go 660 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package connection
  2. func Reverse[T any](slice []T) []T {
  3. var reversed []T
  4. for i := len(slice) - 1; i >= 0; i-- {
  5. reversed = append(reversed, slice[i])
  6. }
  7. return reversed
  8. }
  9. func First[T any](slice []T, first *int) []T {
  10. if len(slice) == 0 || first == nil {
  11. return slice[:]
  12. }
  13. if *first > len(slice) {
  14. *first = len(slice)
  15. }
  16. return slice[:*first]
  17. }
  18. func Last[T any](slice []T, last *int) []T {
  19. if len(slice) < 1 {
  20. return nil
  21. }
  22. if last == nil {
  23. return slice[:]
  24. }
  25. if *last < 0 {
  26. *last = 0
  27. }
  28. var i int
  29. if *last >= len(slice) {
  30. i = 0
  31. } else if *last == 0 {
  32. return nil
  33. } else {
  34. i = len(slice) - *last
  35. }
  36. return slice[i:]
  37. }