|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package lo2
-
- import (
- "github.com/samber/lo"
- "gitlink.org.cn/cloudream/common/utils/math2"
- )
-
- func Remove[T comparable](arr []T, item T) []T {
- index := lo.IndexOf(arr, item)
- if index == -1 {
- return arr
- }
-
- return RemoveAt(arr, index)
- }
-
- func RemoveAll[T comparable](arr []T, item T) []T {
- return lo.Filter(arr, func(i T, idx int) bool {
- return i != item
- })
- }
-
- func RemoveAt[T any](arr []T, index int) []T {
- if index >= len(arr) {
- return arr
- }
-
- return append(arr[:index], arr[index+1:]...)
- }
-
- func RemoveRange[T any](arr []T, start int, length int) []T {
- if start >= len(arr) {
- return arr
- }
-
- length = math2.Min(len(arr), start+length) - start
- copy(arr[start:], arr[start+length:])
- return arr[:len(arr)-length]
- }
-
- func RemoveAllDefault[T comparable](arr []T) []T {
- var def T
- return lo.Filter(arr, func(i T, idx int) bool {
- return i != def
- })
- }
-
- func Clear[T comparable](arr []T, item T) {
- var def T
- for i := 0; i < len(arr); i++ {
- if arr[i] == item {
- arr[i] = def
- }
- }
- }
-
- func ArrayClone[T any](arr []T) []T {
- return append([]T{}, arr...)
- }
-
- func Insert[T any](arr []T, index int, item T) []T {
- arr = append(arr, item)
- copy(arr[index+1:], arr[index:])
- arr[index] = item
- return arr
- }
-
- func Deref[T any](arr []*T) []T {
- result := make([]T, len(arr))
- for i := 0; i < len(arr); i++ {
- result[i] = *arr[i]
- }
-
- return result
- }
-
- func AppendNew[T any](arr []T, items ...T) []T {
- narr := make([]T, 0, len(arr)+len(items))
- narr = append(narr, arr...)
- narr = append(narr, items...)
- return narr
- }
-
- func ArrayEquals[T comparable](arr1, arr2 []T) bool {
- if len(arr1) != len(arr2) {
- return false
- }
-
- for i := 0; i < len(arr1); i++ {
- if arr1[i] != arr2[i] {
- return false
- }
- }
-
- return true
- }
|