# go-utils **Repository Path**: go-utils-team/go-utils ## Basic Information - **Project Name**: go-utils - **Description**: go 语言的 slice和list 增强库 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-01-10 - **Last Updated**: 2023-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-utils [EN](README.md) | 中文 #### 介绍 go 语言的 slice和list 辅助库 #### 软件架构 1. slices:slice辅助库 2. lists:list辅助库 #### Installation 1. Get and install go-utils ```shell $ go get -u gitee.com/go-utils-team/go-utils ``` 2. Import in your code: ``` import "gitee.com/go-utils-team/go-utils" ``` 2. Quick start ```go package main import ( "fmt" slices "gitee.com/go-utils-team/go-utils/slices" ) func main() { slice1 := New(1, 2, 3, 4) // now slice1: int[1,2,3,4] fmt.Println(slices.Min(slice1)) // output: 1 fmt.Println(slices.Max(slice1)) // output: 2 slice2 := slices.Filter(slice1, func(e int) bool {return e > 2}) // now slice2: int[3,4] fmt.Println(slices.All(slice2, func(e int) bool {return e%2 == 0})) // output: false } ``` #### 使用说明 ##### APIs 1. slices ```go // 创建包含参数的切片,支持任意个相同类型的参数: // // slice := New(1, 2, 3, 4) New func(vals ...T) []T // 从一个切片复制出一个新的切片,该切片使用独立的存储空间 Clone func(slice1 []T) []T // 返回一个由 N 个元素副本组成的列表 // // slice := Duplicate(5, 1) // 结果为: [1 1 1 1 1] Duplicate func(N int, v T) []T // 创建一个由 N 个元素 v 组成的切片 // // slice := Sequence(0, 6, 2) // 结果为: [0 2 4 6] Sequence func(From T, To T, Incr T) []T // 判断切片里的所有元素是否都满足条件 All func(slice []T, f FilterFunc[T]) bool // 判断切片里的是否存在某一个元素满足条件 Any func(slice []T, f FilterFunc[T]) bool // 统计满足条件的元素 Count func(slice1 []T, f FilterFunc[T]) int // 删除切片的一个元素,只删除第一出现的元素 Delete func(slice1 []T, v1 T) []T // 删除切片的所有值等于 v 的元素 DeleteAll func(slice1 []T, v T) []T // 删除切片的第一个元素 DropFirst func(slice1 []T) []T // 删除切片的最后一个元素 DropLast func(slice1 []T) []T // 从头到尾依次删除满足条件的元素,直到遇到不满足条件的元素为止。 DropWhile func(slice1 []T, f FilterFunc[T]) []T // 保留满足条件的元素,删除不满足条件的元素。 Filter func(slice1 []T, f FilterFunc[T]) []T // 过滤并映射操作符合函数条件的元素 FilterMap func(slice1 []T, f FilterMapFunc[T, T2]) []T2 // 返回元素在切片中的位置(索引),找不到返回-1 FindIndex func(slice []T, v T) int // 返回第一个元素 First func(slice []T) T // 将 2 层嵌套切片转为单层切片(减少一层,多层切片可以多次调用) Flatten func(slice1 [][]T) []T // 从头到尾依次对所有元素递归调用函数 f,并将累计结果 acc 返回。 FoldL func(slice []T, f FoldFunc[T, T2], acc T2) T2 // 从尾到头依次对所有元素递归调用函数 f,并将累计结果 acc 返回。 FoldR func(slice []T, f FoldFunc[T, T2], acc T2) T2 // 从头到尾依次对所有元素执行函数 f。 Foreach func(slice []T, f ForeachFunc[T]) // 判断是否与另一个切片拥有相同的元素 IsEqual func(a, b []T) bool // 返回最后一个元素 Last func(slice []T) T // 将切片中的每个元素去在 f 中执行,将所有执行结果组成一个新的切片 Map func(slice1 []T, f MapFunc[T, T2]) []T2 // 返回数值最大的一个元素 Max func(slice []T) T // 合并所有切片成一个切片 Merge func(slices ...[]T) []T // 判断元素 v 是否存在切片中 Member func(slice []T, v1 T) bool // 返回数值最小的一个元素 Min func(slice []T) T // 取第N个元素,0 为第一个,正数从头开始,负数从尾开始 Nth func(slice []T, i int) T // 根据条件将切片里的元素分成满足条件的和不满足条件的 Partition func(slice []T, f FilterFunc[T]) ([]T, []T) // 添加一个元素到切片的前面 PushFront func(slice1 []T, v1 T) []T // 添加一个元素到切片的最后 PushBack func(slice1 []T, v1 T) []T // 反转切片的元素 Reverse func(slice1 []T) []T // 按照排序函数来排序切片 Sort func(slice1 []T) []T // 将切片拆成两个切片返回,一个包含前面 N 个元素,另一个包含剩下的元素 Split func(slice []T, N int) ([]T, []T) // 将切片拆成两个切片返回 // 从头到尾依次复制满足条件的元素到第一个切片,直到遇到不满足条件的元素为止,剩下的复制到第二切片 SplitWith func(slice []T, f FilterFunc[T]) ([]T, []T) // 返回一个从 Start 开始,个数为 Len 的子切片。 Sublist func(slice1 []T, Start int, Len int) []T // 删除切片在另一切片里出现的元素 Subtract func(slice []T, slice2 []T) []T // 计算切片里每个元素的总和 Sum func(slice []T) T // 从头到尾依次保留满足条件的元素,直到遇到不满足条件的元素为止。 TakeWhile func(slice1 []T, f FilterFunc[T]) []T // 对切片进行去重处理 Unique func(slice1 []T) []T ``` 2. lists APIs 与 slices 相同,具体参考上面的 slices。 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### Contributors Thank you for considering contributing to the go-utils! #### License The go-utils is open-sourced software licensed under the [MIT license](./LICENSE). **Enjoy!**