Collection包目标是用于替换golang原生的Slice,使用场景是在大量不追求极致性能,追求业务开发效能的场景。
    Collection的使用手册线上地址:http://collection.funaio.cn/
    你也可以通过类库直接在本地启动本地文档:(需要本机安装npm)
    npm install npm run docs:dev // 访问地址: http://localhost:2333/

    版本 说明
    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:

    1. NewIntCollection(objs []int) *IntCollection
    2. NewInt64Collection(objs []int64) *Int64Collection
    3. NewInt32Collection(objs []int32) *Int32Collection
    4. NewUIntCollection(objs []uint) *UIntCollection
    5. NewUInt64Collection(objs []uint64) *UInt64Collection
    6. NewUInt32Collection(objs []uint32) *UInt32Collection
    7. NewFloat64Collection(objs []float64) *Float64Collection
    8. NewFloat32Collection(objs []float32) *Float32Collection
    9. NewStrCollection(objs []string) *StrCollection
    10. NewObjCollection(objs interface{}) *ObjCollection
    11. NewObjPointCollection(objs interface{}) *ObjPointCollection

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

    1. // ICollection 表示数组结构,有几种类型
    2. type ICollection interface {
    3. // Err ICollection错误信息,链式调用的时候需要检查下这个error是否存在,每次调用之后都检查一下
    4. Err() error
    5. // SetErr 设置ICollection的错误信息
    6. SetErr(error) ICollection
    7. /*
    8. 下面的方法对所有Collection都生效
    9. */
    10. // NewEmpty 复制一份当前相同类型的ICollection结构,但是数据是空的
    11. NewEmpty(err ...error) ICollection
    12. // IsEmpty 判断是否是空数组
    13. IsEmpty() bool
    14. // IsNotEmpty 判断是否是空数组
    15. IsNotEmpty() bool
    16. // Append 放入一个元素到数组中,对所有Collection生效, 仅当item和Collection结构不一致的时候返回错误
    17. Append(item interface{}) ICollection
    18. // Remove 删除一个元素, 需要自类实现
    19. Remove(index int) ICollection
    20. // Insert 增加一个元素。
    21. Insert(index int, item interface{}) ICollection
    22. // Search 查找数据中是否包含,-1不包含,>=0 返回数组中元素下标,对所有Collection生效
    23. Search(item interface{}) int
    24. // Unique 过滤数组中重复的元素,仅对基础Collection生效
    25. Unique() ICollection
    26. // Filter 按照某个方法进行过滤, 保留符合的
    27. Filter(func(item interface{}, key int) bool) ICollection
    28. // Reject 按照某个方法进行过滤,去掉符合的
    29. Reject(func(item interface{}, key int) bool) ICollection
    30. // First 获取满足条件的第一个, 如果没有填写过滤条件,就获取所有的第一个
    31. First(...func(item interface{}, key int) bool) IMix
    32. // Last 获取满足条件的最后一个,如果没有填写过滤条件,就获取所有的最后一个
    33. Last(...func(item interface{}, key int) bool) IMix
    34. // Slice 获取数组片段,对所有Collection生效
    35. Slice(...int) ICollection
    36. // Index 获取某个下标,对所有Collection生效
    37. Index(i int) IMix
    38. // SetIndex 设置数组的下标为某个值
    39. SetIndex(i int, val interface{}) ICollection
    40. // Copy 复制当前数组
    41. Copy() ICollection
    42. // Count 获取数组长度,对所有Collection生效
    43. Count() int
    44. // Merge 将两个数组进行合并,参数的数据挂在当前数组中,返回当前数组,对所有Collection生效
    45. Merge(arr ICollection) ICollection
    46. // Each 每个元素都调用一次的方法
    47. Each(func(item interface{}, key int))
    48. // Map 每个元素都调用一次的方法, 并组成一个新的元素
    49. Map(func(item interface{}, key int) interface{}) ICollection
    50. // Reduce 合并一些元素,并组成一个新的元素
    51. Reduce(func(carry IMix, item IMix) IMix) IMix
    52. // Every 判断每个对象是否都满足, 如果collection是空,返回true
    53. Every(func(item interface{}, key int) bool) bool
    54. // ForPage 按照分页进行返回
    55. ForPage(page int, perPage int) ICollection
    56. // Nth 获取从索引offset开始为0,每n位值组成数组
    57. Nth(n int, offset int) ICollection
    58. // Pad 将数组填充到count个数,只能数值型生效
    59. Pad(count int, def interface{}) ICollection
    60. // Pop 从队列右侧弹出结构
    61. Pop() IMix
    62. // Push 推入元素
    63. Push(item interface{}) ICollection
    64. // Prepend 前面插入一个元素
    65. Prepend(item interface{}) ICollection
    66. // Random 随机获取一个元素
    67. Random() IMix
    68. // Reverse 倒置
    69. Reverse() ICollection
    70. // Shuffle 随机乱置
    71. Shuffle() ICollection
    72. // GroupBy 类scala groupby 设计, 根据某个函数分组
    73. GroupBy(func(interface{}, int) interface{}) map[interface{}]ICollection
    74. // Split 按照size个数进行分组
    75. Split(size int) []ICollection
    76. // DD 打印出当前数组结构
    77. DD()
    78. /*
    79. 下面的方法对ObjCollection 和 ObjPointCollection 生效
    80. */
    81. // Pluck 返回数组中对象的某个key组成的数组,仅对ObjectCollection生效, key为对象属性名称,必须为public的属性
    82. Pluck(key string) ICollection
    83. // SortBy 按照某个字段进行排序
    84. SortBy(key string) ICollection
    85. // SortByDesc 按照某个字段进行排序,倒序
    86. SortByDesc(key string) ICollection
    87. /*
    88. 下面的方法对基础Collection生效,但是ObjCollection一旦设置了Compare函数也生效
    89. */
    90. // SetCompare 比较a和b,如果a>b, 返回1,如果a<b, 返回-1,如果a=b, 返回0
    91. // 设置比较函数,理论上所有Collection都能设置比较函数,但是强烈不建议基础Collection设置
    92. SetCompare(func(a interface{}, b interface{}) int) ICollection
    93. // GetCompare 获取比较函数
    94. GetCompare() func(a interface{}, b interface{}) int
    95. // Max 数组中最大的元素,仅对基础Collection生效, 可以传递一个比较函数
    96. Max() IMix
    97. // Min 数组中最小的元素,仅对基础Collection生效
    98. Min() IMix
    99. // Contains 判断是否包含某个元素,(并不进行定位),对基础Collection生效
    100. Contains(obj interface{}) bool
    101. // ContainsCount 判断包含某个元素的个数,返回0代表没有找到,返回正整数代表个数。必须设置compare函数
    102. ContainsCount(obj interface{}) int
    103. // Diff 比较两个数组,获取第一个数组不在第二个数组中的元素,组成新数组,仅对基础元素生效
    104. Diff(arr ICollection) ICollection
    105. // Sort 进行排序, 升序
    106. Sort() ICollection
    107. // SortDesc 进行排序,倒序
    108. SortDesc() ICollection
    109. // Join 进行拼接
    110. Join(split string, format ...func(item interface{}) string) string
    111. // Union 比较两个数组,获取两个数组并集,仅对基础元素生效
    112. Union (arr ICollection) ICollection
    113. // Intersect 比较两个数组,获取两个数组交集,仅对基础元素生效
    114. Intersect (arr ICollection) ICollection
    115. /*
    116. 下面的方法对基础Collection生效
    117. */
    118. // Avg 获取平均值
    119. Avg() IMix
    120. // Median 获取中位值
    121. Median() IMix
    122. // Mode 获取Mode值
    123. Mode() IMix
    124. // Sum 获取sum值
    125. Sum() IMix
    126. /*
    127. 下面的方法对根据不同的对象,进行不同的调用转换
    128. */
    129. // ToStrings 转化为golang原生的字符数组,仅对StrCollection生效
    130. ToStrings() ([]string, error)
    131. // ToInt64s 转化为golang原生的Int64数组,仅对Int64Collection生效
    132. ToInt64s() ([]int64, error)
    133. // ToInt32s 转化为golang原生的Int32数组,仅对Int32Collection生效
    134. ToInt32s() ([]int32, error)
    135. // ToInts 转化为golang原生的Int数组,仅对IntCollection生效
    136. ToInts() ([]int, error)
    137. // ToUInt64s 转化为golang原生的UInt64数组,仅对UInt64Collection生效
    138. ToUInt64s() ([]uint64, error)
    139. // ToUInt32s 转化为golang原生的UInt32数组,仅对UInt32Collection生效
    140. ToUInt32s() ([]uint32, error)
    141. // ToUInts 转化为golang原生的UInt数组,仅对UIntCollection生效
    142. ToUInts() ([]uint, error)
    143. // ToMixs 转化为obj数组
    144. ToMixs() ([]IMix, error)
    145. // ToFloat64s 转化为float64数组
    146. ToFloat64s() ([]float64, error)
    147. // ToFloat32s 转化为float32数组
    148. ToFloat32s() ([]float32, error)
    149. // ToInterfaces 转化为interface{} 数组
    150. ToInterfaces() ([]interface{}, error)
    151. // ToObjs 转化为objs{}数组
    152. ToObjs(interface{}) error
    153. // ToJson 转换为Json
    154. ToJson() ([]byte, error)
    155. // FromJson 从json数组转换
    156. FromJson([]byte) error
    157. }