collections

package module
v0.0.0-...-633e27c Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2025 License: MIT Imports: 16 Imported by: 0

README

List集合

包:"github.com/celebrateduni/collections"

codecov Build

go内置的集合只有数组和切片,有时候我们需要更多高级的数据处理功能,比如:排序、去重、交集、并集、聚合操作时,需要编写非常多的代码才能实现。

List

go内置的集合只有数组和切片,有时候我们需要更多高级的数据处理功能,比如:排序、去重、交集、并集、聚合操作时,需要编写非常多的代码才能实现。

List集合提供了50多个数据操作功能,可以完全代替go原生的数组类型。

Dictionary 字典

Dictionary是字典的意思,是go内置类型map的代替者,是一种更加高级的数据操作方案

pageList分页

PageList实质就是在List的基础上,增加了一个RecordCount字段,在分页数据的场景下一般都会使用PageList类型来返回

ListAny集合

collections.ListAny实际就是collections.List[any]

Documentation

Index

Constants

This section is empty.

Variables

View Source
var KSGUozlJ = PCEhtFL()

Functions

func Addition

func Addition(val1 any, val2 any) any

Addition 两个数值相加

func CompareLeftGreaterThanRight

func CompareLeftGreaterThanRight(pointerMeta fastReflect.PointerMeta, leftValue any, rightValue any) bool

CompareLeftGreaterThanRight 比较两个值,左值是否大于右值

func PCEhtFL

func PCEhtFL() error

Types

type Collection

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

func (*Collection[T]) Add

func (receiver *Collection[T]) Add(item ...T)

Add 添加元素

func (*Collection[T]) AddArray

func (receiver *Collection[T]) AddArray(arr []T)

AddArray 添加元素

func (*Collection[T]) AddIfNotExists

func (receiver *Collection[T]) AddIfNotExists(item T)

AddIfNotExists 如果元素不存在,则添加元素

func (*Collection[T]) AddList

func (receiver *Collection[T]) AddList(lst List[T])

AddList 添加元素

func (*Collection[T]) AddRange

func (receiver *Collection[T]) AddRange(lst Enumerable[T])

AddRange 添加元素

func (*Collection[T]) Clear

func (receiver *Collection[T]) Clear()

Clear 清空集合

func (*Collection[T]) Remove

func (receiver *Collection[T]) Remove(item T)

Remove 移除元素

func (*Collection[T]) RemoveAll

func (receiver *Collection[T]) RemoveAll(fn func(item T) bool)

RemoveAll 移除条件=true的元素

type Dictionary

type Dictionary[TKey comparable, TValue any] struct {
	ReadonlyDictionary[TKey, TValue]
}

Dictionary 字典

func NewDictionary

func NewDictionary[TKey comparable, TValue any]() Dictionary[TKey, TValue]

NewDictionary 创建一个字典

func NewDictionaryFromMap

func NewDictionaryFromMap[TKey comparable, TValue any](source map[TKey]TValue) Dictionary[TKey, TValue]

NewDictionaryFromMap 创建一个字典

func (*Dictionary[TKey, TValue]) Add

func (receiver *Dictionary[TKey, TValue]) Add(key TKey, value TValue)

Add 添加元素

func (*Dictionary[TKey, TValue]) AddMap

func (receiver *Dictionary[TKey, TValue]) AddMap(source map[TKey]TValue)

AddMap 添加元素

func (*Dictionary[TKey, TValue]) Clear

func (receiver *Dictionary[TKey, TValue]) Clear()

Clear 清除元素

func (*Dictionary[TKey, TValue]) Foreach

func (receiver *Dictionary[TKey, TValue]) Foreach(itemFn func(TKey, TValue))

Foreach for range操作

func (*Dictionary[TKey, TValue]) New

func (receiver *Dictionary[TKey, TValue]) New()

New 初始化(用于反映时使用)

func (*Dictionary[TKey, TValue]) Remove

func (receiver *Dictionary[TKey, TValue]) Remove(key TKey)

Remove 移除元素

func (*Dictionary[TKey, TValue]) Scan

func (receiver *Dictionary[TKey, TValue]) Scan(val any) error

Scan scan value into Jsonb, implements sql.Scanner interface

func (*Dictionary[TKey, TValue]) ToReadonlyDictionary

func (receiver *Dictionary[TKey, TValue]) ToReadonlyDictionary() ReadonlyDictionary[TKey, TValue]

ToReadonlyDictionary 转成ReadonlyDictionary对象

func (*Dictionary[TKey, TValue]) UnmarshalJSON

func (receiver *Dictionary[TKey, TValue]) UnmarshalJSON(ba []byte) error

UnmarshalJSON to deserialize []byte

func (*Dictionary[TKey, TValue]) Update

func (receiver *Dictionary[TKey, TValue]) Update(key TKey, f func(value *TValue))

Update 更新元素

type Enumerable

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

func (Enumerable[T]) All

func (receiver Enumerable[T]) All(fn func(item T) bool) bool

All 是否所有数据都满足fn条件

func (Enumerable[T]) Any

func (receiver Enumerable[T]) Any() bool

Any 是否存在

func (Enumerable[T]) Average

func (receiver Enumerable[T]) Average(fn func(item T) any) float64

Average 求平均数

func (Enumerable[T]) AverageItem

func (receiver Enumerable[T]) AverageItem() float64

AverageItem 求平均数

func (Enumerable[T]) Concat

func (receiver Enumerable[T]) Concat(lstRight List[T]) Enumerable[T]

Concat 合并两个集合

func (Enumerable[T]) Contains

func (receiver Enumerable[T]) Contains(item T) bool

Contains 是否包含元素

func (Enumerable[T]) ContainsAny

func (receiver Enumerable[T]) ContainsAny(item T) bool

ContainsAny 元素中是否包含item(strings.Contains)

func (Enumerable[T]) ContainsCount

func (receiver Enumerable[T]) ContainsCount(item T) int

ContainsCount 获取包含几个元素

func (Enumerable[T]) ContainsPrefix

func (receiver Enumerable[T]) ContainsPrefix(item T) bool

ContainsPrefix 元素中是否包含前缀

func (Enumerable[T]) ContainsSuffix

func (receiver Enumerable[T]) ContainsSuffix(item T) bool

ContainsSuffix 元素中是否包含后缀

func (Enumerable[T]) Count

func (receiver Enumerable[T]) Count() int

Count 集合大小

func (Enumerable[T]) Distinct

func (receiver Enumerable[T]) Distinct() Enumerable[T]

Distinct 集合去重

func (Enumerable[T]) Empty

func (receiver Enumerable[T]) Empty() Enumerable[T]

Empty 返回一个新的Empty集合

func (Enumerable[T]) Except

func (receiver Enumerable[T]) Except(lstRight List[T]) Enumerable[T]

Except 移除参数中包含的集合元素

func (Enumerable[T]) Find

func (receiver Enumerable[T]) Find(itemFn func(item *T) bool) *T

Find 查找指定条件的元素,返回批一个指针元素

func (Enumerable[T]) First

func (receiver Enumerable[T]) First() T

First 查找符合条件的第一个元素

func (Enumerable[T]) FirstAddr

func (receiver Enumerable[T]) FirstAddr() *T

FirstAddr 返回第一个指针元素

func (Enumerable[T]) For

func (receiver Enumerable[T]) For(itemFn func(index int, item *T))

For 遍历操作

func (Enumerable[T]) Foreach

func (receiver Enumerable[T]) Foreach(itemFn func(item *T))

Foreach for range操作

func (Enumerable[T]) GroupBy

func (receiver Enumerable[T]) GroupBy(mapSlice any, getMapKeyFunc func(item T) any)

GroupBy 将数组进行分组后返回map

var lstMap map[string][]testItem
lst.GroupBy(&lstMap, func(item testItem) any {
	return item.name
})
or
var lstMap map[string]collections.List[testItem]
lst.GroupBy(&lstMap, func(item testItem) any {
	return item.name
})

func (Enumerable[T]) Intersect

func (receiver Enumerable[T]) Intersect(lstRight List[T]) Enumerable[T]

Intersect 两个集合的交集(共同存在的元素)

func (Enumerable[T]) IsEmpty

func (receiver Enumerable[T]) IsEmpty() bool

IsEmpty 集合是为空的

func (Enumerable[T]) Last

func (receiver Enumerable[T]) Last() T

Last 集合最后一个元素

func (Enumerable[T]) Max

func (receiver Enumerable[T]) Max(fn func(item T) any) any

Max 获取最大值

func (Enumerable[T]) MaxItem

func (receiver Enumerable[T]) MaxItem() T

MaxItem 获取最大值

func (Enumerable[T]) Min

func (receiver Enumerable[T]) Min(fn func(item T) any) any

Min 获取最小值

func (Enumerable[T]) MinItem

func (receiver Enumerable[T]) MinItem() T

MinItem 获取最小值

func (Enumerable[T]) OrderBy

func (receiver Enumerable[T]) OrderBy(fn func(item T) any) Enumerable[T]

OrderBy 正序排序,fn 返回的是要排序的字段的值

func (Enumerable[T]) OrderByDescending

func (receiver Enumerable[T]) OrderByDescending(fn func(item T) any) Enumerable[T]

OrderByDescending 倒序排序,fn 返回的是要排序的字段的值

func (Enumerable[T]) OrderByDescendingItem

func (receiver Enumerable[T]) OrderByDescendingItem() Enumerable[T]

OrderByDescendingItem 倒序排序,fn 返回的是要排序的字段的值

func (Enumerable[T]) OrderByItem

func (receiver Enumerable[T]) OrderByItem() Enumerable[T]

OrderByItem 正序排序,fn 返回的是要排序的字段的值

func (Enumerable[T]) OrderByThen

func (receiver Enumerable[T]) OrderByThen(fn func(leftItem, rightItem T) bool) Enumerable[T]

OrderByThen 自定义多条件,返回true时,排在前面

func (Enumerable[T]) Parallel

func (receiver Enumerable[T]) Parallel(itemFn func(item *T))

Parallel for range 并行操作

func (Enumerable[T]) Rand

func (receiver Enumerable[T]) Rand() *T

Rand 返回随机元素

func (Enumerable[T]) Range

func (receiver Enumerable[T]) Range(startIndex int, length int) Enumerable[T]

Range 获取切片范围 startIndex:起始位置 length:从startIndex开始之后的长度

func (Enumerable[T]) RangeStart

func (receiver Enumerable[T]) RangeStart(startIndex int) Enumerable[T]

RangeStart 获取切片范围(指定startIndex,不指定endIndex)

func (Enumerable[T]) Reverse

func (receiver Enumerable[T]) Reverse() List[T]

Reverse 集合反转

func (Enumerable[T]) Select

func (receiver Enumerable[T]) Select(sliceOrList any, fn func(item T) any)

Select 筛选子元素字段

arrSlice:切片数组类型

eg:

lstYaml := NewList("1", "", "2")
var lst []string
lstYaml.Select(&lst, func(item string) any {
    return "go:" + item
})
result: lst = []string { "go:1", "go:", "go:2" }

var lstSelect List[string]
lstYaml.Select(&lstSelect, func(item string) any {
	return "go:" + item
})
result: lstSelect = List[string] { "go:1", "go:", "go:2" }

func (Enumerable[T]) SelectMany

func (receiver Enumerable[T]) SelectMany(sliceOrList any, fn func(item T) any)

SelectMany 筛选子元素字段

arrSlice:切片数组类型

eg:

lstYaml := NewList([]string{"1", "2"}, []string{"3", "4"})
var arr []string
lstYaml.SelectMany(&arr, func(item []string) any {
	return item
})
// result:	arr = []string { "1", "2", "3", "4" }

var lst2 List[string]
lst.SelectMany(&lst2, func(item []string) any {
	return item
})
// result:	lst = List[string] { "1", "2", "3", "4" }

func (Enumerable[T]) SelectManyItem

func (receiver Enumerable[T]) SelectManyItem(sliceOrList any)

SelectManyItem 筛选子元素字段

arrSlice:切片数组类型

eg:

lstYaml := NewList([]string{"1", "2"}, []string{"3", "4"})
var arr []string
lstYaml.SelectMany(&arr)
// result:	arr = []string { "1", "2", "3", "4" }

var lst2 List[string]
lst.SelectMany(&lst2)
// result:	lst = List[string] { "1", "2", "3", "4" }

func (Enumerable[T]) Skip

func (receiver Enumerable[T]) Skip(count int) Enumerable[T]

Skip 跳过前多少条记录

func (Enumerable[T]) Sum

func (receiver Enumerable[T]) Sum(fn func(item T) any) any

Sum 求总和

func (Enumerable[T]) SumItem

func (receiver Enumerable[T]) SumItem() T

SumItem 求总和

func (Enumerable[T]) Take

func (receiver Enumerable[T]) Take(count int) Enumerable[T]

Take 返回前多少条数据

func (Enumerable[T]) ToArray

func (receiver Enumerable[T]) ToArray() []T

ToArray 转成数组

func (Enumerable[T]) ToArrayAny

func (receiver Enumerable[T]) ToArrayAny() []any

ToArrayAny 转成数组

func (Enumerable[T]) ToList

func (receiver Enumerable[T]) ToList() List[T]

ToList 返回List集合

func (Enumerable[T]) ToListAny

func (receiver Enumerable[T]) ToListAny() ListAny

ToListAny 转成ListAny

func (Enumerable[T]) ToMap

func (receiver Enumerable[T]) ToMap(mapSlice any, getMapKeyFunc func(item T) any, getMapValueFunc func(item T) any)

ToMap 转成字典

func (Enumerable[T]) ToPageList

func (receiver Enumerable[T]) ToPageList(pageSize int, pageIndex int) PageList[T]

ToPageList 数组分页

func (Enumerable[T]) ToString

func (receiver Enumerable[T]) ToString(split string) string

ToString 将集合转成字符串,并用split分隔

func (Enumerable[T]) Union

func (receiver Enumerable[T]) Union(lstRight List[T]) Enumerable[T]

Union 合并两个集合,并去重

func (Enumerable[T]) Where

func (receiver Enumerable[T]) Where(fn func(item T) bool) Enumerable[T]

Where 对数据进行筛选

type IList

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

func (*IList[T]) Index

func (receiver *IList[T]) Index(index int) T

Index 获取第index索引位置的元素

func (*IList[T]) IndexOf

func (receiver *IList[T]) IndexOf(item T) int

IndexOf 元素在集合的索引位置

func (*IList[T]) Insert

func (receiver *IList[T]) Insert(index int, item T)

Insert 向第index索引位置插入元素

func (*IList[T]) RemoveAt

func (receiver *IList[T]) RemoveAt(index int)

RemoveAt 移除指定索引的元素

func (*IList[T]) Set

func (receiver *IList[T]) Set(index int, item T)

Set 设置值

type List

type List[T any] struct {
	IList[T]      // 对集合做修改操作
	Enumerable[T] // 对集合做读操作
	// contains filtered or unexported fields
}

List 集合

func NewList

func NewList[T any](source ...T) List[T]

NewList 创建集合

func NewListFromChan

func NewListFromChan[T any](c chan T) List[T]

NewListFromChan 创建集合,将chan中的数据填充到集合

func ToList

func ToList[T any](arr string) List[T]

ToList 将arr按,号分隔,转换成List[T]

func (*List[T]) AsEnumerable

func (receiver *List[T]) AsEnumerable() Enumerable[T]

AsEnumerable 返回enumerable类型

func (List[T]) Copy

func (receiver List[T]) Copy() List[T]

Copy 克隆出新的集合

func (*List[T]) GormDataType

func (receiver *List[T]) GormDataType() string

GormDataType gorm common data type

func (*List[T]) IsNil

func (receiver *List[T]) IsNil() bool

IsNil 是否未初始化

func (List[T]) MarshalJSON

func (receiver List[T]) MarshalJSON() ([]byte, error)

MarshalJSON to output non base64 encoded []byte 此处不能用指针,否则json序列化时不执行

func (*List[T]) New

func (receiver *List[T]) New()

New 返回enumerable类型

func (*List[T]) Scan

func (receiver *List[T]) Scan(val any) error

Scan scan value into Jsonb, implements sql.Scanner interface

func (*List[T]) UnmarshalJSON

func (receiver *List[T]) UnmarshalJSON(b []byte) error

UnmarshalJSON to deserialize []byte

func (List[T]) Value

func (receiver List[T]) Value() (driver.Value, error)

Value return json value, implement driver.Valuer interface

type ListAny

type ListAny struct {
	List[any]
}

func NewListAny

func NewListAny(source ...any) ListAny

type PageList

type PageList[TData any] struct {
	// 总记录数
	RecordCount int64
	// 数据列表
	List List[TData]
}

PageList 用于分页数组,包含总记录数

func NewPageList

func NewPageList[TData any](list List[TData], recordCount int64) PageList[TData]

NewPageList 数据分页列表及总数

type ReadonlyDictionary

type ReadonlyDictionary[TKey comparable, TValue any] struct {
	// contains filtered or unexported fields
}

ReadonlyDictionary 只读字典

func NewReadonlyDictionary

func NewReadonlyDictionary[TKey comparable, TValue any]() ReadonlyDictionary[TKey, TValue]

NewReadonlyDictionary 创建一个字典

func NewReadonlyDictionaryFromMap

func NewReadonlyDictionaryFromMap[TKey comparable, TValue any](source map[TKey]TValue) ReadonlyDictionary[TKey, TValue]

NewReadonlyDictionaryFromMap 创建一个字典

func (ReadonlyDictionary[TKey, TValue]) ContainsKey

func (receiver ReadonlyDictionary[TKey, TValue]) ContainsKey(key TKey) bool

ContainsKey 是否存在KEY

func (ReadonlyDictionary[TKey, TValue]) ContainsValue

func (receiver ReadonlyDictionary[TKey, TValue]) ContainsValue(v TValue) bool

ContainsValue 是否存在指定的Value

func (ReadonlyDictionary[TKey, TValue]) Count

func (receiver ReadonlyDictionary[TKey, TValue]) Count() int

Count 获取字典数量

func (ReadonlyDictionary[TKey, TValue]) GetValue

func (receiver ReadonlyDictionary[TKey, TValue]) GetValue(key TKey) TValue

GetValue 获取指定KEY的Value

func (ReadonlyDictionary[TKey, TValue]) GormDataType

func (receiver ReadonlyDictionary[TKey, TValue]) GormDataType() string

GormDataType gorm common data type

func (ReadonlyDictionary[TKey, TValue]) IsNil

func (receiver ReadonlyDictionary[TKey, TValue]) IsNil() bool

IsNil 是否未初始化

func (ReadonlyDictionary[TKey, TValue]) Keys

func (receiver ReadonlyDictionary[TKey, TValue]) Keys() List[TKey]

Keys 获取字典的Keys

func (ReadonlyDictionary[TKey, TValue]) MarshalJSON

func (receiver ReadonlyDictionary[TKey, TValue]) MarshalJSON() ([]byte, error)

MarshalJSON to output non base64 encoded []byte 此处不能用指针,否则json序列化时不执行

func (ReadonlyDictionary[TKey, TValue]) ToDictionary

func (receiver ReadonlyDictionary[TKey, TValue]) ToDictionary() Dictionary[TKey, TValue]

ToDictionary 返回只写字典

func (ReadonlyDictionary[TKey, TValue]) ToMap

func (receiver ReadonlyDictionary[TKey, TValue]) ToMap() map[TKey]TValue

ToMap 转成map对象

func (ReadonlyDictionary[TKey, TValue]) Value

func (receiver ReadonlyDictionary[TKey, TValue]) Value() (driver.Value, error)

Value return json value, implement driver.Valuer interface

func (ReadonlyDictionary[TKey, TValue]) Values

func (receiver ReadonlyDictionary[TKey, TValue]) Values() List[TValue]

Values 获取字典的value

Jump to

Keyboard shortcuts

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