github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/isc/listobj.go (about) 1 package isc 2 3 type ISCList[T any] []T 4 5 func NewList[T any]() ISCList[T] { 6 return []T{} 7 } 8 9 func NewListWithList[T any](list []T) ISCList[T] { 10 return list 11 } 12 13 func NewListWithItems[T any](items ...T) ISCList[T] { 14 return items 15 } 16 17 func (l *ISCList[T]) Add(item T) int { 18 idx := len(*l) 19 *l = append(*l, item) 20 return idx 21 } 22 23 func (l *ISCList[T]) AddAll(item ...T) { 24 *l = append(*l, item...) 25 } 26 27 func (l *ISCList[T]) Insert(index int, item T) int { 28 *l = append((*l)[:index], append([]T{item}, (*l)[index:]...)...) 29 return index 30 } 31 32 func (l *ISCList[T]) Delete(index int) T { 33 item := (*l)[index] 34 *l = append((*l)[:index], (*l)[index+1:]...) 35 return item 36 } 37 38 func (l *ISCList[T]) Clear() { 39 *l = []T{} 40 } 41 42 func (l ISCList[T]) IsEmpty() bool { 43 return len(l) == 0 44 } 45 46 func (l ISCList[T]) Size() int { 47 return len(l) 48 } 49 50 func (l ISCList[T]) ForEach(f func(T)) { 51 for _, item := range l { 52 f(item) 53 } 54 } 55 56 func (l ISCList[T]) ForEachIndexed(f func(int, T)) { 57 for idx, item := range l { 58 f(idx, item) 59 } 60 } 61 62 func (l ISCList[T]) Distinct() ISCList[T] { 63 return ListDistinct(l) 64 } 65 66 func (l ISCList[T]) Filter(f func(T) bool) ISCList[T] { 67 return ListFilter(l, f) 68 } 69 70 func (l ISCList[T]) FilterNot(f func(T) bool) ISCList[T] { 71 return ListFilterNot(l, f) 72 } 73 74 func (l ISCList[T]) FilterIndexed(f func(int, T) bool) ISCList[T] { 75 return ListFilterIndexed(l, f) 76 } 77 78 func (l ISCList[T]) FilterNotIndexed(f func(int, T) bool) ISCList[T] { 79 return ListFilterNotIndexed(l, f) 80 } 81 82 func (l ISCList[T]) FilterTo(dest *[]T, f func(T) bool) ISCList[T] { 83 return ListFilterTo(l, dest, f) 84 } 85 86 func (l ISCList[T]) FilterNotTo(dest *[]T, f func(T) bool) ISCList[T] { 87 return ListFilterNotTo(l, dest, f) 88 } 89 90 func (l ISCList[T]) FilterIndexedTo(dest *[]T, f func(int, T) bool) ISCList[T] { 91 return ListFilterIndexedTo(l, dest, f) 92 } 93 94 func (l ISCList[T]) FilterNotIndexedTo(dest *[]T, f func(int, T) bool) ISCList[T] { 95 return ListFilterNotIndexedTo(l, dest, f) 96 } 97 98 func (l ISCList[T]) Contains(item T) bool { 99 return ListContains(l, item) 100 } 101 102 func (l ISCList[T]) Find(f func(T) bool) *T { 103 return Find(l, f) 104 } 105 106 func (l ISCList[T]) FindLast(f func(T) bool) *T { 107 return FindLast(l, f) 108 } 109 110 func (l ISCList[T]) First() T { 111 return First(l) 112 } 113 114 func (l ISCList[T]) Last() T { 115 return Last(l) 116 } 117 118 func (l ISCList[T]) FirstOrNull() *T { 119 return FirstOrNull(l) 120 } 121 122 func (l ISCList[T]) LastOrNull() *T { 123 return LastOrNull(l) 124 } 125 126 func (l ISCList[T]) IndexOf(item T) int { 127 return IndexOf(l, item) 128 } 129 130 func (l ISCList[T]) LastIndexOf(item T) int { 131 return LastIndexOf(l, item) 132 } 133 134 func (l ISCList[T]) IndexOfCondition(f func(T) bool) int { 135 return IndexOfCondition(l, f) 136 } 137 138 func (l ISCList[T]) LastIndexOfCondition(f func(T) bool) int { 139 return LastIndexOfCondition(l, f) 140 } 141 142 func (l ISCList[T]) JoinToString(f func(T) string) string { 143 return ListJoinToString(l, f) 144 } 145 146 func (l ISCList[T]) JoinToStringFull(sep string, prefix string, postfix string, f func(T) string) string { 147 return ListJoinToStringFull(l, sep, prefix, postfix, f) 148 } 149 150 func (l ISCList[T]) All(f func(T) bool) bool { 151 return ListAll(l, f) 152 } 153 154 func (l ISCList[T]) Any(f func(T) bool) bool { 155 return ListAny(l, f) 156 } 157 158 func (l ISCList[T]) None(f func(T) bool) bool { 159 return ListNone(l, f) 160 } 161 162 func (l ISCList[T]) Count(f func(T) bool) int { 163 return ListCount(l, f) 164 } 165 166 func (l ISCList[T]) SubList(fromIndex int, toIndex int) ISCList[T] { 167 r := SubList(l, fromIndex, toIndex) 168 return NewListWithList(r) 169 } 170 171 func (l ISCList[T]) Slice(r IntRange) ISCList[T] { 172 rr := Slice(l, r) 173 return NewListWithList(rr) 174 } 175 176 func (l ISCList[T]) Take(n int) ISCList[T] { 177 r := Take(l, n) 178 return NewListWithList(r) 179 } 180 181 func (l ISCList[T]) TakeLast(n int) ISCList[T] { 182 r := TakeLast(l, n) 183 return NewListWithList(r) 184 } 185 186 func (l ISCList[T]) TakeWhile(n int, f func(T) bool) ISCList[T] { 187 r := TakeWhile(l, n, f) 188 return NewListWithList(r) 189 } 190 191 func (l ISCList[T]) TakeLastWhile(n int, f func(T) bool) ISCList[T] { 192 r := TakeLastWhile(l, n, f) 193 return NewListWithList(r) 194 } 195 196 func (l ISCList[T]) Drop(n int) ISCList[T] { 197 r := Drop(l, n) 198 return NewListWithList(r) 199 } 200 201 func (l ISCList[T]) DropLast(n int) ISCList[T] { 202 r := DropLast(l, n) 203 return NewListWithList(r) 204 } 205 206 func (l ISCList[T]) DropWhile(n int, f func(T) bool) ISCList[T] { 207 r := DropWhile(l, n, f) 208 return NewListWithList(r) 209 } 210 211 func (l ISCList[T]) DropLastWhile(n int, f func(T) bool) ISCList[T] { 212 r := DropLastWhile(l, n, f) 213 return NewListWithList(r) 214 } 215 216 func (l ISCList[T]) Partition(partition int) [][]T { 217 return Partition(l, partition) 218 } 219 220 func (l ISCList[T]) PartitionWithCal(f func(int) int) [][]T { 221 return PartitionWithCal(l, f) 222 } 223 224 func (l ISCList[T]) Plus(n []T) ISCList[T] { 225 return ListPlus(l, n) 226 } 227 228 func (l ISCList[T]) Minus(n []T) ISCList[T] { 229 return ListMinus(l, n) 230 } 231 232 func (l ISCList[T]) Equals(n ISCList[T]) bool { 233 return ListEquals(l, n) 234 } 235 236 func ListToSet[T comparable](list ISCList[T]) ISCSet[T] { 237 res := ISCSet[T]{} 238 for _, v := range list { 239 _ = res.Add(v) 240 } 241 return res 242 }