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  }