anySlice

package
v1.64.43 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 6, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

README

AnySlice 使用说明

  1. 初始化

    a1 := anySlice.New[int]()
    // 或
    a1 := anySlice.New[int](anySlice.Len(5)) // make([]int, 5)
    // 或
    a1 := anySlice.New[int](anySlice.Cap(5)) // make([]int, 0, 5)
    
    a2 := anySlice.NewList([]int{1, 2, 3})
    // 或
    a2 := anySlice.New[int]().SetAttr(anySlice.List([]int{1, 2, 3}))
    // 或
    a2 := anySlice.New[int](anySlice.List([]int{1, 2, 3}))
    
    a3 := anySlice.NewItems("a", "b", "c")
    // 或
    a3 := anySlice.New[string]().SetAttr(anySlice.Items("a", "b", "c"))
    // 或
    a3 := anySlice.New[string](anySlice.Items("a", "b", "c"))
    
  2. 获取内容

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New[int](anySlice.Items(1, 2, 3))
    	Printf("%#v", a1.ToSlice()) // []int{1, 2, 3}
    }
    
  3. 判断是否为空

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New[int](anySlice.Items(1, 2, 3))
    
    	Printf("is empty: %v", a1.Empty())        // false
    	Printf("is not empty: %v", a1.NotEmpty()) // true
    }
    
  4. 如果为空则执行回调

    package main
    
    import (
    	"errors"
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New[int](anySlice.Items(1, 2, 3))
    
    	a1.IfEmpty(func(array anySlice.AnySlicer[int]) {
    		Printf("array is empty: %v", array) // do nothing
    	})
    
    	a1.IfNotEmpty(func(array anySlice.AnySlicer[int]) {
    		Printf("array is not empty: %+v", array) // array is not empty: &{data:[1 2 3] mu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:{_:{} v:0} readerWait:{_:{} v:0}}}
    	})
    
    	a1.IfEmptyError(func(array anySlice.AnySlicer[int]) error {
    		Printf("array is empty: %v", array) // do nothing
    		return errors.New("array is empty")
    	})
    
    	a1.IfNotEmptyError(func(array anySlice.AnySlicer[int]) error {
    		Printf("array is not empty: %+v", array) // array is not empty: &{data:[1 2 3] mu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:{_:{} v:0} readerWait:{_:{} v:0}}}
    		return errors.New("array is not empty")
    	})
    }
    
  5. 判断key是否存在

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New[int](anySlice.Items(1, 2, 3))
    
    	Printf("the key %d has? = %v", 2, a1.Has(2)) // the key 2 has? = true
    }
    
  6. 通过index设置value

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Len[string](5))
    	a1.SetValue(0, "111").SetValue(1, "222").SetValue(4, "333")
    
    	Printf("%#v", a1.ToSlice()) // []string{"111", "222", "", "", "333"}
    }
    
    // 这里严格遵守golang中slice的用法
    // anySlice.Len=make([]string, size)
    // anySlice.Cap=make([]string, 0, size)
    // Len和Cap不能同时使用,后者会覆盖前者对内存重新分配
    
  7. 通过key获取value

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Len[string](5))
    	a1.SetValue(4, "999")
    
    	Printf("number 4 is %s", a1.GetValue(4)) // number 4 is 999
    }
    
  8. 通过index获取value的指针

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    	"github.com/aid297/aid/ptr"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Len[string](5))
    	a1.SetValue(1, "888").SetValue(4, "999")
    
    	Printf("number 4 is %v\n", a1.GetValuePtr(4)) // number 4 is 0x1400013c130
    	// 等价于:
    	v := a1.GetValuePtr(4)
    	Printf("number 4 is %v\n", &v) // number 4 is 0x140000a2230。这里需要注意,两个指针地址不一样,因为 v 是 GetValuePtr(4) 返回值的拷贝
    	// 等价于
    	Printf("number 1 is %v", ptr.New(a1.GetValue(1))) // number 1 is 0x1400010b470
    }
    
  9. 通过index获取value并指定默认值

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Cap[string](5))
    	Printf("%#v\n", a1.GetValueOrDefault(0, "default string"))  // "default string"
    }
    
  10. 通过index获取多个value

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Cap[string](5))
    	a1.Append("first", "second", "third")
    	Printf("%#v\n", a1.GetValues(0, 1, 2)) // []string{"first", "second", "third"}
    }
    
  11. 通过index获取切片

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Cap[string](5))
    	a1.Append("first", "second", "third")
    	Printf("%#v\n", a1.GetValuesBySlices(0, 3)) // []string{"first", "second", "third"} 等价于:a1[0:3]
    }
    
  12. 获取第一最后的值

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Cap[string](5))
    	a1.Append("first", "second", "third")
    	Printf("第一个值:%#v\n", a1.First())
    	Printf("最后一个值:%#v\n", a1.Last())
    }
    
  13. 获取原始切片

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Cap[string](5))
    	a1.Append("first", "second", "third")
    	Printf("a1 to slice: %#v\n", a1.ToSlice()) // a1 to slice: []string{"first", "second", "third"}
    }
    
  14. 通过value获取index

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Cap[string](5))
    	a1.Append("first", "second", "third")
    	Printf("second of index: %#v\n", a1.GetIndexByValue("second"))           // second of index: 1
    	Printf("third of index: %#v\n", a1.GetIndexesByValues("third", "first")) // third of index: []int{2, 0}
    }
    
  15. 乱序

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[string]("first", "second", "third", "fourth", "fifth"))
    	Printf("Shuffle: %#v\n", a1.Shuffle().ToSlice()) // Shuffle: []string{"first", "fifth", "second", "fourth", "third"}
    }
    
  16. 长度

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[string]("first", "second", "third", "fourth", "fifth"))
    	Printf("length of a1: %d\n", a1.Length()) // length of a1: 5
    }
    
  17. 纯长度

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[string]("first", "second", "third", "fourth", "fifth", "", "", ""))
    	Printf("length of a1 for not empty: %d\n", a1.LengthNotEmpty()) // length of a1: 5
    }
    
  18. 过滤

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](-2, -1, 0, 1, 2))
    	Printf("filter: %#v\n", a1.Filter(func(item int) bool { return item > 0 }).ToSlice()) // filter: []int{1, 2}
    }
    
  19. 去掉空值零值

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](0, 1, 0, 3, 0, 2))
    	Printf("remove empty: %#v\n", a1.RemoveEmpty().ToSlice()) // remove empty: []int{1, 3, 2}
    }
    
  20. 拼接字符串

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](0, 1, 0, 3, 0, 2))
    	Printf("join to string: %#v\n", a1.Join("、")) // join to string: "0、1、0、3、0、2"
    }
    
  21. 去掉空值零值后拼接字符串

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](0, 1, 0, 3, 0, 2))
    	Printf("join to string: %#v\n", a1.JoinNotEmpty("、")) // join to string: "1、3、2"
    }
    
  22. innot int

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](0, 1, 0, 3, 0, 2))
    	Printf("in : %#v\n", a1.In(1, 2))        // true
    	Printf("not in : %#v\n", a1.NotIn(1, 2)) // false
    }
    
  23. 如果存在不存在则执行回调

    package main
    
    import (
    	"errors"
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](0, 1, 0, 3, 0, 2))
    
    	a1.IfIn(func(array anySlice.AnySlicer[int]) {
    		Println("1,2,3 is in this array")
    	}, 1, 2, 3) // 1,2,3 is in this array
    
    	a1.IfNotIn(func(array anySlice.AnySlicer[int]) {
    		Println("4,5,6 is not in this array")
    	}, 4, 5, 6) // 4,5,6 is not in this array
    
    	err := a1.IfNotInError(func(array anySlice.AnySlicer[int]) error {
    		return errors.New("7,8,9 is not in this array")
    	}, 7, 8, 9)
    	Printf("err: %#v\n", err) // err: &errors.errorString{s:"7,8,9 is not in this array"}
    }
    
  24. 判断是否全部为空任意为空

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](0, 1, 0, 3, 0, 2))
    
    	Printf("is all empty: %#v\n", a1.AllEmpty()) // is all empty: false
    	Printf("is any empty: %#v\n", a1.AnyEmpty()) // is any empty: true
    }
    
  25. 分块

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.New(anySlice.Items[int](1, 2, 3, 4, 5, 6, 7, 8, 9))
    
    	Printf("chunked: %#v\n", a1.Chunk(3)) // chunked: [][]int{[]int{1, 2, 3}, []int{4, 5, 6}, []int{7, 8, 9}}
    }
    
  26. 摘取

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	type User struct {
    		Name string
    		Age  int
    	}
    	a1 := anySlice.New(anySlice.Items[User](
    		User{Name: "张三", Age: 17},
    		User{Name: "李四", Age: 18},
    		User{Name: "王五", Age: 27},
    		User{Name: "赵六", Age: 28},
    	))
    
    	Printf("pluck user's name: %#v\n", a1.Pluck(func(item User) any { return item.Age }).ToSlice()) // pluck user's name: []interface {}{17, 18, 27, 28}
    	// 注意#1:pluck 的结果是 []any,如果需要 []int 需要再转换一次
    	// 注意#2:pluck 的结果不会覆盖原有的a1,需要a2来接收
    }
    
  27. 交集

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.NewItems(1, 2, 3, 4, 5)
    	a2 := anySlice.NewItems(2, 3, 4)
    
    	Printf("intersection: %#v\n", a1.Intersection(a2).ToSlice())             // intersection: []int{2, 3, 4}
    	Printf("intersection: %#v\n", a1.IntersectionBySlice(4, 5, 6).ToSlice()) // intersection: []int{4, 5}
    }
    
  28. 差集

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.NewItems(1, 2, 3, 4, 5)
    	a2 := anySlice.NewItems(2, 3, 4)
    
    	Printf("difference: %#v\n", a1.Difference(a2).ToSlice())             // difference: []int{1, 5}
    	Printf("difference: %#v\n", a1.DifferenceBySlice(4, 5, 6).ToSlice()) // difference: []int{1, 2, 3}
    }
    
  29. 并集

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.NewItems(1, 2, 3, 4, 5)
    	a2 := anySlice.NewItems(2, 3, 4)
    
    	Printf("union: %#v\n", a1.Union(a2).ToSlice())             // union: []int{1, 2, 3, 4, 5}
    	Printf("union: %#v\n", a1.UnionBySlice(4, 5, 6).ToSlice()) // union: []int{1, 2, 3, 4, 5, 6}
    }
    
  30. 通过index删除

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.NewItems(1, 2, 3, 4, 5)
    	a1.RemoveByIndex(1, 2)
    	Printf("remove by index: %#v\n", a1.ToSlice()) // remove by index: []int{1, 4, 5}
    }
    
  31. everyeach迭代

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    type User struct{ FirstName, LastName, FullName string }
    
    func main() {
    	a1 := anySlice.NewItems(
    		User{FirstName: "三", LastName: "张", FullName: "三张"},
    		User{FirstName: "四", LastName: "李", FullName: "李四"},
    		User{FirstName: "五", LastName: "王", FullName: "王五"},
    		User{FirstName: "六", LastName: "赵", FullName: "赵六"},
    	)
    
    	a1.
    		Every(func(item User) User {
    			item.FullName = item.FirstName + item.LastName
    			return item
    		}).
    		Each(func(idx int, item User) { Printf("idx: %d, item: %#v\n", idx, item) })
    	// idx: 0, item: main.User{FirstName:"三", LastName:"张", FullName:"三张"}
    	// idx: 1, item: main.User{FirstName:"四", LastName:"李", FullName:"李四"}
    	// idx: 2, item: main.User{FirstName:"五", LastName:"王", FullName:"王五"}
    	// idx: 3, item: main.User{FirstName:"六", LastName:"赵", FullName:"赵六"}
    }
    
  32. 排序

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    )
    
    func main() {
    	a1 := anySlice.NewItems(1, 2, 3, 4, 5)
    
    	Println(a1.Sort(func(i, j int) bool { return a1.GetValue(i) > a1.GetValue(j) }).ToString())
    	// Output: [5 4 3 2 1]
    	// 等价于:sort.Slice(slice, func(i, j int) bool)
    }
    
  33. 其他简单方法:

    func Lock() AnySlicer[T] {}              // 写锁:加锁
    func Unlock() AnySlicer[T] {}            // 写锁:解锁
    func RLock() AnySlicer[T] {}             // 读锁:加锁
    func RUnlock() AnySlicer[T] {}           // 读锁:解锁
    func Clean() AnySlicer[T]                // 清理数据
    func MarshalJSON() ([]byte, error)      // JSON 序列化 → 实现 JSON 序列化接口
    func UnmarshalJSON(data []byte) error   // JSON 反序列化 → 实现 JSON 序列化接口
    func Copy() AnySlicer                    // 复制自身
    func ToString(formats ...string) string // 转字符串
    
  34. 高级方法:填充

    a1 := anySlice.FillFunc[User,string]([]User{
    		{Name: "张三"},
    		{Name: "李四"},
    		{Name: "王五"},
    		{Name: "赵六"},
    	}, func(_ int, value User) string { return value.Name })
    Println(a1.ToString()) // [张三 李四 王五 赵六]
    
  35. 高级方法:转换

    package main
    
    import (
    	. "fmt"
    
    	"github.com/aid297/aid/array/anySlice"
    	"github.com/aid297/aid/operation/operationV2"
    )
    
    func main() {
    	a1 := anySlice.Cast[int, string](
    		anySlice.NewItems(40, 50, 60, 70, 80),
    		func(value int) string {
    			return operationV2.NewTernary(operationV2.TrueValue("及格"), operationV2.FalseValue("不及格")).GetByValue(value >= 60)
    		},
    	).ToString()
    	Println(a1) // [不及格 不及格 及格 及格 及格]
    }
    

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ToAny

func ToAny(slice any) []any

ToAny converts any slice to []any

Types

type AnyArray

type AnyArray[T any] struct {
	// contains filtered or unexported fields
}

func (*AnyArray[T]) AllEmpty

func (my *AnyArray[T]) AllEmpty() bool

AllEmpty 判断当前数组是否0空

func (*AnyArray[T]) AnyEmpty

func (my *AnyArray[T]) AnyEmpty() bool

AnyEmpty 判断当前数组中是否存在0值

func (*AnyArray[T]) Append

func (my *AnyArray[T]) Append(v ...T) AnySlicer[T]

Append 添加值

func (*AnyArray[T]) Chunk

func (my *AnyArray[T]) Chunk(size int) [][]T

Chunk 分块

func (*AnyArray[T]) Clean

func (my *AnyArray[T]) Clean() AnySlicer[T]

Clean 清理数据

func (*AnyArray[T]) Copy added in v1.64.42

func (my *AnyArray[T]) Copy() AnySlicer[T]

func (*AnyArray[T]) Difference

func (my *AnyArray[T]) Difference(other AnySlicer[T]) AnySlicer[T]

Difference 取差集

func (*AnyArray[T]) DifferenceBySlice

func (my *AnyArray[T]) DifferenceBySlice(other ...T) AnySlicer[T]

DifferenceBySlice 取差集:通过切片

func (*AnyArray[T]) Each

func (my *AnyArray[T]) Each(fn func(idx int, item T)) AnySlicer[T]

Each 遍历数组

func (*AnyArray[T]) Empty

func (my *AnyArray[T]) Empty() bool

Empty 判断是否为空

func (*AnyArray[T]) Every

func (my *AnyArray[T]) Every(fn func(item T) T) AnySlicer[T]

Every 循环处理每一个

func (*AnyArray[T]) Filter

func (my *AnyArray[T]) Filter(fn func(item T) bool) AnySlicer[T]

Filter 过滤数组值

func (*AnyArray[T]) First

func (my *AnyArray[T]) First() T

First 获取第一个值

func (*AnyArray[T]) GetIndexByValue

func (my *AnyArray[T]) GetIndexByValue(value T) int

GetIndexByValue 根据值获取索引下标

func (*AnyArray[T]) GetIndexes

func (my *AnyArray[T]) GetIndexes() []int

GetIndexes 获取所有索引

func (*AnyArray[T]) GetIndexesByValues

func (my *AnyArray[T]) GetIndexesByValues(values ...T) []int

GetIndexesByValues 通过值获取索引下标

func (*AnyArray[T]) GetValue

func (my *AnyArray[T]) GetValue(idx int) T

Get 获取值

func (*AnyArray[T]) GetValueOrDefault

func (my *AnyArray[T]) GetValueOrDefault(idx int, defaultValue T) T

GetValueOrDefault 获取值:如果索引不存在则返回默认值

func (*AnyArray[T]) GetValuePtr

func (my *AnyArray[T]) GetValuePtr(idx int) *T

GetValuePtr 获取值指针

func (*AnyArray[T]) GetValues

func (my *AnyArray[T]) GetValues(indexes ...int) []T

获取多个值

func (*AnyArray[T]) GetValuesBySlices

func (my *AnyArray[T]) GetValuesBySlices(original, finished int) []T

GetValuesBySlices 获取切片值

func (*AnyArray[T]) Has

func (my *AnyArray[T]) Has(k int) bool

Has 检查是否存在

func (*AnyArray[T]) IfEmpty

func (my *AnyArray[T]) IfEmpty(fn func(array AnySlicer[T])) AnySlicer[T]

IfEmpty 判断是否为空:如果为空则执行回调

func (*AnyArray[T]) IfEmptyError

func (my *AnyArray[T]) IfEmptyError(fn func(array AnySlicer[T]) error) error

IfEmptyError 判断是否为空:如果为空则执行回调并返回错误

func (*AnyArray[T]) IfIn

func (my *AnyArray[T]) IfIn(fn func(array AnySlicer[T]), targets ...T) AnySlicer[T]

IfIn 如果In 检查值是否存在:如果存在则执行回调

func (*AnyArray[T]) IfInError

func (my *AnyArray[T]) IfInError(fn func(array AnySlicer[T]) error, targets ...T) error

func (*AnyArray[T]) IfNotEmpty

func (my *AnyArray[T]) IfNotEmpty(fn func(array AnySlicer[T])) AnySlicer[T]

IfNotEmpty 判断是否不为空:如果不为空则执行回调

func (*AnyArray[T]) IfNotEmptyError

func (my *AnyArray[T]) IfNotEmptyError(fn func(array AnySlicer[T]) error) error

IfNotEmptyError 判断是否不为空:如果不为空则执行回调并返回错误

func (*AnyArray[T]) IfNotIn

func (my *AnyArray[T]) IfNotIn(fn func(array AnySlicer[T]), targets ...T) AnySlicer[T]

IfNotIn 如果NotIn 检查值是否不存在:如果不存在则执行回调

func (*AnyArray[T]) IfNotInError

func (my *AnyArray[T]) IfNotInError(fn func(array AnySlicer[T]) error, targets ...T) error

func (*AnyArray[T]) In

func (my *AnyArray[T]) In(targets ...T) bool

In 检查值是否存在

func (*AnyArray[T]) Intersection

func (my *AnyArray[T]) Intersection(other AnySlicer[T]) AnySlicer[T]

Intersection 取交集

func (*AnyArray[T]) IntersectionBySlice

func (my *AnyArray[T]) IntersectionBySlice(other ...T) AnySlicer[T]

IntersectionBySlice 取交集:通过切片

func (*AnyArray[T]) Join

func (my *AnyArray[T]) Join(sep string) string

Join 拼接字符串

func (*AnyArray[T]) JoinNotEmpty

func (my *AnyArray[T]) JoinNotEmpty(sep string) string

JoinNotEmpty 拼接非空字符串

func (*AnyArray[T]) Last

func (my *AnyArray[T]) Last() T

Last 获取最后一个值

func (*AnyArray[T]) Length

func (my *AnyArray[T]) Length() int

Length 获取数组长度

func (*AnyArray[T]) LengthNotEmpty

func (my *AnyArray[T]) LengthNotEmpty() int

LengthNotEmpty 获取非0值长度

func (*AnyArray[T]) Lock

func (my *AnyArray[T]) Lock() AnySlicer[T]

Lock 加锁:写锁

func (*AnyArray[T]) MarshalJSON

func (my *AnyArray[T]) MarshalJSON() ([]byte, error)

MarshalJSON 实现接口:json序列化

func (*AnyArray[T]) NotEmpty

func (my *AnyArray[T]) NotEmpty() bool

NotEmpty 判断是否不为空

func (*AnyArray[T]) NotIn

func (my *AnyArray[T]) NotIn(targets ...T) bool

NotIn 检查值是否不存在

func (*AnyArray[T]) Pluck

func (my *AnyArray[T]) Pluck(fn func(item T) any) AnySlicer[any]

Pluck 获取数组中指定字段的值

func (*AnyArray[T]) RLock

func (my *AnyArray[T]) RLock() AnySlicer[T]

RLock 加锁:读锁

func (*AnyArray[T]) RUnlock

func (my *AnyArray[T]) RUnlock() AnySlicer[T]

RUnlock 释放:读锁

func (*AnyArray[T]) RemoveByIndex

func (my *AnyArray[T]) RemoveByIndex(indexes ...int) AnySlicer[T]

RemoveByIndexes 根据索引删除元素

func (*AnyArray[T]) RemoveEmpty

func (my *AnyArray[T]) RemoveEmpty() AnySlicer[T]

RemoveEmpty 清除0值元素

func (*AnyArray[T]) SetAttrs

func (my *AnyArray[T]) SetAttrs(attrs ...Attributer[T]) AnySlicer[T]

SetAttrs 设置属性

func (*AnyArray[T]) SetData

func (my *AnyArray[T]) SetData(data []T)

SetData 设置数据

func (*AnyArray[T]) SetValue

func (my *AnyArray[T]) SetValue(k int, v T) AnySlicer[T]

SetValue 设置值

func (*AnyArray[T]) Shuffle

func (my *AnyArray[T]) Shuffle() AnySlicer[T]

Shuffle 打乱切片中的元素顺序

func (*AnyArray[T]) Sort

func (my *AnyArray[T]) Sort(fn func(i, j int) bool) AnySlicer[T]

Sort 排序

func (*AnyArray[T]) ToSlice added in v1.64.17

func (my *AnyArray[T]) ToSlice() []T

ToSlice 获取全部值:到切片

func (*AnyArray[T]) ToString

func (my *AnyArray[T]) ToString(formats ...string) string

ToString 导出string

func (*AnyArray[T]) Union

func (my *AnyArray[T]) Union(other AnySlicer[T]) AnySlicer[T]

Union 取并集

func (*AnyArray[T]) UnionBySlice

func (my *AnyArray[T]) UnionBySlice(other ...T) AnySlicer[T]

UnionBySlice 取并集:通过切片

func (*AnyArray[T]) Unique

func (my *AnyArray[T]) Unique() AnySlicer[T]

Unique 去重

func (*AnyArray[T]) Unlock

func (my *AnyArray[T]) Unlock() AnySlicer[T]

Unlock 释放:写锁

func (*AnyArray[T]) UnmarshalJSON

func (my *AnyArray[T]) UnmarshalJSON(data []byte) error

UnmarshalJSON 实现接口:json反序列化

type AnySlicer

type AnySlicer[T any] interface {
	SetAttrs(attrs ...Attributer[T]) AnySlicer[T]
	SetData(data []T)
	Lock() AnySlicer[T]
	Unlock() AnySlicer[T]
	RLock() AnySlicer[T]
	RUnlock() AnySlicer[T]
	Empty() bool
	NotEmpty() bool
	IfEmpty(fn func(array AnySlicer[T])) AnySlicer[T]
	IfNotEmpty(fn func(array AnySlicer[T])) AnySlicer[T]
	IfEmptyError(fn func(array AnySlicer[T]) error) error
	IfNotEmptyError(fn func(array AnySlicer[T]) error) error
	Has(k int) bool
	SetValue(k int, v T) AnySlicer[T]
	GetValue(idx int) T
	GetValuePtr(idx int) *T
	GetValueOrDefault(idx int, defaultValue T) T
	GetValues(indexes ...int) []T
	GetValuesBySlices(original, finished int) []T
	Append(v ...T) AnySlicer[T]
	First() T
	Last() T
	ToSlice() []T
	GetIndexes() []int
	GetIndexByValue(value T) int
	GetIndexesByValues(values ...T) []int
	Shuffle() AnySlicer[T]
	Length() int
	LengthNotEmpty() int
	Filter(fn func(item T) bool) AnySlicer[T]
	RemoveEmpty() AnySlicer[T]
	Join(sep string) string
	JoinNotEmpty(sep string) string
	In(targets ...T) bool
	NotIn(targets ...T) bool
	IfIn(fn func(array AnySlicer[T]), targets ...T) AnySlicer[T]
	IfNotIn(fn func(array AnySlicer[T]), targets ...T) AnySlicer[T]
	IfInError(fn func(array AnySlicer[T]) error, targets ...T) error
	IfNotInError(fn func(array AnySlicer[T]) error, targets ...T) error
	AllEmpty() bool
	AnyEmpty() bool
	Chunk(size int) [][]T
	Pluck(fn func(item T) any) AnySlicer[any]
	Intersection(other AnySlicer[T]) AnySlicer[T]
	IntersectionBySlice(other ...T) AnySlicer[T]
	Difference(other AnySlicer[T]) AnySlicer[T]
	DifferenceBySlice(other ...T) AnySlicer[T]
	Union(other AnySlicer[T]) AnySlicer[T]
	UnionBySlice(other ...T) AnySlicer[T]
	Unique() AnySlicer[T]
	RemoveByIndex(indexes ...int) AnySlicer[T]
	Every(fn func(item T) T) AnySlicer[T]
	Each(fn func(idx int, item T)) AnySlicer[T]
	Sort(fn func(i, j int) bool) AnySlicer[T]
	Clean() AnySlicer[T]
	MarshalJSON() ([]byte, error)
	UnmarshalJSON(data []byte) error
	Copy() AnySlicer[T]
	ToString(formats ...string) string
}

func Cast

func Cast[SRC, DST any](src AnySlicer[SRC], fn func(value SRC) DST) AnySlicer[DST]

Cast 转换值类型

func CastAny

func CastAny[DST any](src AnySlicer[any], fn func(value any) DST) AnySlicer[DST]

CastAny 任意类型转目标类型

func FillFunc added in v1.64.15

func FillFunc[SRC any, DST any](src []SRC, fn func(idx int, value SRC) DST) AnySlicer[DST]

func New

func New[T any](attrs ...Attributer[T]) AnySlicer[T]

func NewItems

func NewItems[T any](items ...T) AnySlicer[T]

func NewList

func NewList[T any](data []T) AnySlicer[T]

type AttrCap

type AttrCap[T any] struct {
	// contains filtered or unexported fields
}

func (AttrCap[T]) Register

func (my AttrCap[T]) Register(anyArray AnySlicer[T])

type AttrEmpty

type AttrEmpty[T any] struct{}

func (AttrEmpty[T]) Register

func (my AttrEmpty[T]) Register(anyArray AnySlicer[T])

type AttrItems

type AttrItems[T any] struct {
	// contains filtered or unexported fields
}

func (AttrItems[T]) Register

func (my AttrItems[T]) Register(anyArray AnySlicer[T])

type AttrLen

type AttrLen[T any] struct {
	// contains filtered or unexported fields
}

func (AttrLen[T]) Register

func (my AttrLen[T]) Register(anyArray AnySlicer[T])

type AttrList

type AttrList[T any] struct {
	// contains filtered or unexported fields
}

func (AttrList[T]) Register

func (my AttrList[T]) Register(anyArray AnySlicer[T])

type Attributer

type Attributer[T any] interface{ Register(anyArray AnySlicer[T]) }

func Cap

func Cap[T any](cap int) Attributer[T]

func Empty

func Empty[T any]() Attributer[T]

func Items

func Items[T any](items ...T) Attributer[T]

func Len

func Len[T any](length int) Attributer[T]

func List

func List[T any](list []T) Attributer[T]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL