MCPcopy Index your code
hub / github.com/jianfengye/collection

github.com/jianfengye/collection @v2.0.5

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.0.5 ↗ · + Follow
133 symbols 482 edges 2 files 108 documented · 81% 11 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

collection

Collection包目标是用于替换golang原生的Slice,使用场景是在大量不追求极致性能,追求业务开发效能的场景。

Collection的使用手册线上地址:http://collection.funaio.cn/

你也可以通过类库直接在本地启动本地文档:(需要本机安装npm)

npm install 
npm run docs:dev

// 访问地址: http://localhost:2333/
版本 说明
v1.4.2 增加KeyByStrField方法,增加交集和并集函数 Union,Intersect
v1.4.0 增加三种新类型 uint32, uint, uint64, 增加GroupBy 和 Split 方法
v1.3.0 增加文档说明
1.2.0 增加对象指针数组,增加测试覆盖率, 增加ToInterfaces方法
1.1.2 增加一些空数组的判断,解决一些issue
1.1.1 对collection包进行了json解析和反解析的支持,对mix类型支持了SetField和RemoveFields的类型设置
1.1.0 增加了对int32的支持,增加了延迟加载,增加了Copy函数,增加了compare从ICollection传递到IMix,使用快排加速了Sort方法
1.0.1 第一次发布

go get github.com/jianfengye/collection@v1.4.0

Collection包目前支持的元素类型:int32, int, int64, uint32, uint, uint64, float32, float64, string, object, objectPoint

第一步:使用下列几个方法进行初始化Collection:

NewIntCollection(objs []int) *IntCollection

NewInt64Collection(objs []int64) *Int64Collection

NewInt32Collection(objs []int32) *Int32Collection

NewUIntCollection(objs []uint) *UIntCollection

NewUInt64Collection(objs []uint64) *UInt64Collection

NewUInt32Collection(objs []uint32) *UInt32Collection

NewFloat64Collection(objs []float64) *Float64Collection

NewFloat32Collection(objs []float32) *Float32Collection

NewStrCollection(objs []string) *StrCollection

NewObjCollection(objs interface{}) *ObjCollection

NewObjPointCollection(objs interface{}) *ObjPointCollection

第二步:你可以很方便使用ICollection的所有函数:

// ICollection 表示数组结构,有几种类型
type ICollection interface {
    // Err ICollection错误信息,链式调用的时候需要检查下这个error是否存在,每次调用之后都检查一下
    Err() error
    // SetErr 设置ICollection的错误信息
    SetErr(error) ICollection

    /*
        下面的方法对所有Collection都生效
    */
    // NewEmpty 复制一份当前相同类型的ICollection结构,但是数据是空的
    NewEmpty(err ...error) ICollection
    // IsEmpty 判断是否是空数组
    IsEmpty() bool
    // IsNotEmpty 判断是否是空数组
    IsNotEmpty() bool
    // Append 放入一个元素到数组中,对所有Collection生效, 仅当item和Collection结构不一致的时候返回错误
    Append(item interface{}) ICollection
    // Remove 删除一个元素, 需要自类实现
    Remove(index int) ICollection
    // Insert 增加一个元素。
    Insert(index int, item interface{}) ICollection
    // Search 查找数据中是否包含,-1不包含,>=0 返回数组中元素下标,对所有Collection生效
    Search(item interface{}) int
    // Unique 过滤数组中重复的元素,仅对基础Collection生效
    Unique() ICollection
    // Filter 按照某个方法进行过滤, 保留符合的
    Filter(func(item interface{}, key int) bool) ICollection
    // Reject 按照某个方法进行过滤,去掉符合的
    Reject(func(item interface{}, key int) bool) ICollection
    // First 获取满足条件的第一个, 如果没有填写过滤条件,就获取所有的第一个
    First(...func(item interface{}, key int) bool) IMix
    // Last 获取满足条件的最后一个,如果没有填写过滤条件,就获取所有的最后一个
    Last(...func(item interface{}, key int) bool) IMix
    // Slice 获取数组片段,对所有Collection生效
    Slice(...int) ICollection
    // Index 获取某个下标,对所有Collection生效
    Index(i int) IMix
    // SetIndex 设置数组的下标为某个值
    SetIndex(i int, val interface{}) ICollection
    // Copy 复制当前数组
    Copy() ICollection
    // Count 获取数组长度,对所有Collection生效
    Count() int
    // Merge 将两个数组进行合并,参数的数据挂在当前数组中,返回当前数组,对所有Collection生效
    Merge(arr ICollection) ICollection

    // Each 每个元素都调用一次的方法
    Each(func(item interface{}, key int))
    // Map 每个元素都调用一次的方法, 并组成一个新的元素
    Map(func(item interface{}, key int) interface{}) ICollection
    // Reduce 合并一些元素,并组成一个新的元素
    Reduce(func(carry IMix, item IMix) IMix) IMix
    // Every 判断每个对象是否都满足, 如果collection是空,返回true
    Every(func(item interface{}, key int) bool) bool
    // ForPage 按照分页进行返回
    ForPage(page int, perPage int) ICollection
    // Nth 获取从索引offset开始为0,每n位值组成数组
    Nth(n int, offset int) ICollection
    // Pad 将数组填充到count个数,只能数值型生效
    Pad(count int, def interface{}) ICollection
    // Pop 从队列右侧弹出结构
    Pop() IMix
    // Push 推入元素
    Push(item interface{}) ICollection
    // Prepend 前面插入一个元素
    Prepend(item interface{}) ICollection
    // Random 随机获取一个元素
    Random() IMix
    // Reverse 倒置
    Reverse() ICollection
    // Shuffle 随机乱置
    Shuffle() ICollection
    // GroupBy 类scala groupby 设计, 根据某个函数分组
    GroupBy(func(interface{}, int) interface{}) map[interface{}]ICollection
    // Split 按照size个数进行分组
    Split(size int) []ICollection
    // DD 打印出当前数组结构
    DD()

    /*
        下面的方法对ObjCollection 和 ObjPointCollection 生效
    */
    // Pluck 返回数组中对象的某个key组成的数组,仅对ObjectCollection生效, key为对象属性名称,必须为public的属性
    Pluck(key string) ICollection
    // SortBy 按照某个字段进行排序
    SortBy(key string) ICollection
    // SortByDesc 按照某个字段进行排序,倒序
    SortByDesc(key string) ICollection
    // KeyByStrField 根据某个字段为key,返回一个map, 要求key对应的field是string
    KeyByStrField(key string) (map[string]interface{}, error)

    /*
        下面的方法对基础Collection生效,但是ObjCollection一旦设置了Compare函数也生效
    */
    // SetCompare 比较a和b,如果a>b, 返回1,如果a<b, 返回-1,如果a=b, 返回0
    // 设置比较函数,理论上所有Collection都能设置比较函数,但是强烈不建议基础Collection设置
    SetCompare(func(a interface{}, b interface{}) int) ICollection
    // GetCompare 获取比较函数
    GetCompare() func(a interface{}, b interface{}) int
    // Max 数组中最大的元素,仅对基础Collection生效, 可以传递一个比较函数
    Max() IMix
    // Min 数组中最小的元素,仅对基础Collection生效
    Min() IMix
    // Contains 判断是否包含某个元素,(并不进行定位),对基础Collection生效
    Contains(obj interface{}) bool
    // ContainsCount 判断包含某个元素的个数,返回0代表没有找到,返回正整数代表个数。必须设置compare函数
    ContainsCount(obj interface{}) int
    // Diff 比较两个数组,获取第一个数组不在第二个数组中的元素,组成新数组,仅对基础元素生效
    Diff(arr ICollection) ICollection
    // Sort 进行排序, 升序
    Sort() ICollection
    // SortDesc 进行排序,倒序
    SortDesc() ICollection
    // Join 进行拼接
    Join(split string, format ...func(item interface{}) string) string
    // Union 比较两个数组,获取两个数组并集,仅对基础元素生效
    Union (arr ICollection) ICollection
    // Intersect 比较两个数组,获取两个数组交集,仅对基础元素生效
    Intersect (arr ICollection) ICollection

    /*
        下面的方法对基础Collection生效
    */
    // Avg 获取平均值
    Avg() IMix
    // Median 获取中位值
    Median() IMix
    // Mode 获取Mode值
    Mode() IMix
    // Sum 获取sum值
    Sum() IMix

    /*
        下面的方法对根据不同的对象,进行不同的调用转换
    */
    // ToStrings 转化为golang原生的字符数组,仅对StrCollection生效
    ToStrings() ([]string, error)
    // ToInt64s 转化为golang原生的Int64数组,仅对Int64Collection生效
    ToInt64s() ([]int64, error)
    // ToInt32s 转化为golang原生的Int32数组,仅对Int32Collection生效
    ToInt32s() ([]int32, error)
    // ToInts 转化为golang原生的Int数组,仅对IntCollection生效
    ToInts() ([]int, error)
    // ToUInt64s 转化为golang原生的UInt64数组,仅对UInt64Collection生效
    ToUInt64s() ([]uint64, error)
    // ToUInt32s 转化为golang原生的UInt32数组,仅对UInt32Collection生效
    ToUInt32s() ([]uint32, error)
    // ToUInts 转化为golang原生的UInt数组,仅对UIntCollection生效
    ToUInts() ([]uint, error)
    // ToMixs 转化为obj数组
    ToMixs() ([]IMix, error)
    // ToFloat64s 转化为float64数组
    ToFloat64s() ([]float64, error)
    // ToFloat32s 转化为float32数组
    ToFloat32s() ([]float32, error)
    // ToInterfaces 转化为interface{} 数组
    ToInterfaces() ([]interface{}, error)
    // ToObjs 转化为objs{}数组
    ToObjs(interface{}) error

    // ToJson 转换为Json
    ToJson() ([]byte, error)
    // FromJson 从json数组转换
    FromJson([]byte) error
}

更多例子请参考: 使用手册

License

collection is licensed under Apache License.

Contributors

感谢下列作者的contributor. [Contribute].

author

有任何问题可直接github留言,或者联系作者:轩脉刃

xuanmairen

Core symbols most depended-on inside this repo

NewCollection
called by 75
collection.go
SetErr
called by 37
collection.go
Index
called by 28
collection.go
isComparable
called by 12
collection.go
Count
called by 11
collection.go
Contains
called by 8
collection.go
Append
called by 7
collection.go
Remove
called by 5
collection.go

Shape

Method 65
Function 63
Struct 5

Languages

Go100%

Modules by API surface

collection.go69 symbols
collection_test.go64 symbols

For agents

$ claude mcp add collection \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact