collections

package module
v0.13.0 Latest Latest
Warning

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

Go to latest
Published: Feb 4, 2024 License: MIT Imports: 11 Imported by: 22

README

List集合

包:"github.com/farseer-go/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

This section is empty.

Functions

func Addition

func Addition(val1 any, val2 any) any

Addition 两个数值相加

func CompareLeftGreaterThanRight

func CompareLeftGreaterThanRight(leftValue any, rightValue any) bool

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

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 added in v0.9.0

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

AddArray 添加元素

func (*Collection[T]) AddList added in v0.9.0

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

AddList 添加元素

func (*Collection[T]) AddRange added in v0.4.0

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]) New added in v0.13.0

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 added in v0.4.0

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

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 added in v0.12.0

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

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

func (Enumerable[T]) ContainsPrefix added in v0.12.0

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

ContainsPrefix 元素中是否包含前缀

func (Enumerable[T]) ContainsSuffix added in v0.12.0

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]) First

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

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

func (Enumerable[T]) For added in v0.9.0

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

For 遍历操作

func (Enumerable[T]) Foreach added in v0.8.0

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]) Parallel added in v0.9.0

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 added in v0.9.0

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]) 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 added in v0.12.0

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

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

func ToList added in v0.9.0

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]) GormDataType added in v0.10.0

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 added in v0.4.0

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 added in v0.4.0

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 added in v0.4.0

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

ReadonlyDictionary 只读字典

func NewReadonlyDictionary added in v0.4.0

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

NewReadonlyDictionary 创建一个字典

func NewReadonlyDictionaryFromMap added in v0.4.0

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

NewReadonlyDictionaryFromMap 创建一个字典

func (ReadonlyDictionary[TKey, TValue]) ContainsKey added in v0.4.0

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

ContainsKey 是否存在KEY

func (ReadonlyDictionary[TKey, TValue]) ContainsValue added in v0.4.0

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

ContainsValue 是否存在指定的Value

func (ReadonlyDictionary[TKey, TValue]) Count added in v0.4.0

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

Count 获取字典数量

func (ReadonlyDictionary[TKey, TValue]) GetValue added in v0.4.0

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

GetValue 获取指定KEY的Value

func (ReadonlyDictionary[TKey, TValue]) GormDataType added in v0.4.0

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

GormDataType gorm common data type

func (ReadonlyDictionary[TKey, TValue]) IsNil added in v0.4.0

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

IsNil 是否未初始化

func (ReadonlyDictionary[TKey, TValue]) Keys added in v0.4.0

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

Keys 获取字典的Keys

func (ReadonlyDictionary[TKey, TValue]) MarshalJSON added in v0.4.0

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

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

func (ReadonlyDictionary[TKey, TValue]) ToDictionary added in v0.9.0

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

ToDictionary 返回只写字典

func (ReadonlyDictionary[TKey, TValue]) ToMap added in v0.4.0

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

ToMap 转成map对象

func (ReadonlyDictionary[TKey, TValue]) Value added in v0.4.0

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

Value return json value, implement driver.Valuer interface

func (ReadonlyDictionary[TKey, TValue]) Values added in v0.4.0

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