Documentation
¶
Overview ¶
XCollect 提供了一组集合类型数据的工具函数集,包括数组操作工具和线程安全的字典工具。
功能特性
- 数组工具:泛型数组操作函数,支持查找、删除、插入等常用功能,适用于任意可比较类型
- 字典工具:线程安全的泛型 Map,支持高效的读写操作和顺序/并发遍历,兼具性能与易用性
使用手册
1. 数组工具
1.1 按值查找
arr := []int{1, 2, 3, 4, 5}
idx := XCollect.Index(arr, 3) // 返回 2
exists := XCollect.Contains(arr, 3) // 返回 true
1.2 条件查找
idx = XCollect.Index(arr, func(x int) bool {
return x%2 == 0
}) // 返回第一个偶数的索引 1
1.3 元素删除
arr = XCollect.Remove(arr, 3) // 返回 [1, 2, 4, 5] arr = XCollect.Delete(arr, 1) // 返回 [1, 4, 5]
1.4 元素添加
arr = XCollect.Append(arr, 6) // 返回 [1, 4, 5, 6] arr = XCollect.Insert(arr, 1, 2) // 返回 [1, 2, 4, 5, 6]
2. 字典工具
2.1 基本操作
map := XCollect.NewMap()
map.Store("key1", 100)
map.Store("key2", 200)
value, exists := map.Load("key1") // 返回 100, true
map.Delete("key1")
map.Clear()
2.2 遍历操作
map.Range(func(key, value any) bool {
fmt.Printf("键: %v, 值: %v\n", key, value)
return true
})
map.RangeConcurrent(func(chunk int, key, value any) bool {
fmt.Printf("分片: %d, 键: %v, 值: %v\n", chunk, key, value)
return true
}, func(chunk int) {
fmt.Printf("开始并发遍历,分片数量: %d\n", chunk)
})
更多信息请参考模块文档。
Index ¶
- func Append[T comparable](arr []T, ele T) []T
- func Contains[T comparable](arr []T, ele any) bool
- func Delete[T comparable](arr []T, idx int) []T
- func Index[T comparable](arr []T, ele any) int
- func Insert[T comparable](arr []T, idx int, ele T) []T
- func Remove[T comparable](arr []T, ele any) []T
- type Map
- func (m *Map) Clear()
- func (m *Map) Delete(key any)
- func (m *Map) Load(key any) (value any, ok bool)
- func (m *Map) LoadAndDelete(key any) (value any, loaded bool)
- func (m *Map) LoadOrStore(key any, value any) (actual any, loaded bool)
- func (m *Map) Range(process func(key any, value any) bool)
- func (m *Map) RangeConcurrent(process func(chunk int, key any, value any) bool, worker ...func(int))
- func (m *Map) Store(key any, value any)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Contains ¶
func Contains[T comparable](arr []T, ele any) bool
Contains 检查指定元素是否存在于数组中。参数 ele 可以是具体值或条件函数 func(T) bool。 如果元素存在返回 true,否则返回 false。
func Delete ¶
func Delete[T comparable](arr []T, idx int) []T
Delete 删除数组中指定索引位置的元素。如果索引无效或数组为空,返回原数组。
func Index ¶
func Index[T comparable](arr []T, ele any) int
Index 在数组中查找指定元素,返回其第一次出现的索引位置。如果未找到或数组为空,返回 -1。 参数 ele 可以是具体值或判断函数 func(T) bool。
func Insert ¶
func Insert[T comparable](arr []T, idx int, ele T) []T
Insert 在数组的指定位置插入元素。如果索引无效或数组为空,返回原数组。
func Remove ¶
func Remove[T comparable](arr []T, ele any) []T
Remove 从数组中移除所有指定的元素。参数 ele 可以是具体值或条件函数 func(T) bool。 返回移除元素后的新数组。
Types ¶
type Map ¶ added in v0.0.3
type Map struct {
// contains filtered or unexported fields
}
Map 提供一个线程安全的键值映射结构。 内部使用分段锁实现,将数据分成多个分片,每个分片有独立的锁,减少锁竞争。 键值存储采用 map 用于快速索引,切片用于遍历优化。 适用于高并发读写场景,大数据遍历性能优于标准库的 sync.Map。
func NewMap ¶ added in v0.0.3
func NewMap() *Map
NewMap 创建并返回一个新的 Map 实例。 返回的 Map 实例是未初始化的,将在首次使用时延迟初始化。
func (*Map) Clear ¶ added in v0.0.3
func (m *Map) Clear()
Clear 清除所有键值对。 该方法会重置所有分片的数据,但保留分片结构,适用于需要重用 Map 的场景。 该操作是线程安全的,对每个分片使用写锁保护。
func (*Map) Delete ¶ added in v0.0.3
Delete 删除指定 key 及其对应的值。 若 key 存在,删除并重排内部切片以保持数据紧凑;否则不做处理。 该操作是线程安全的,使用写锁保护。
func (*Map) Load ¶ added in v0.0.3
Load 返回指定 key 对应的值。 如果 key 存在,则返回对应的值和 true,否则返回 nil 和 false。 该操作是线程安全的,使用读锁保护。
func (*Map) LoadAndDelete ¶ added in v0.0.3
LoadAndDelete 返回指定 key 对应的值并将其从映射中删除。 value 是 key 对应的值,如果 key 不存在则为 nil。 loaded 表示 key 是否存在,true 表示 key 存在并已删除,false 表示 key 不存在。 该操作是线程安全的,使用写锁保护。
func (*Map) LoadOrStore ¶ added in v0.0.3
LoadOrStore 返回指定 key 的值,若 key 不存在则写入默认值。 actual 表示实际存储的值(已存在的或新写入的)。 loaded 表示 key 已存在,false 表示 key 不存在并已写入新值。 该操作是线程安全的,使用写锁保护。
func (*Map) Range ¶ added in v0.0.3
Range 遍历所有键值对,并调用用户提供的 process 函数。 process 是处理函数,接收 key 和 value 作为参数,返回布尔值,如果 process 返回 false,则提前中断遍历。 该操作是线程安全的,对每个分片使用读锁保护。 注意:遍历过程中不应修改 Map 内容,否则可能导致不可预期的结果。
func (*Map) RangeConcurrent ¶ added in v0.0.3
func (m *Map) RangeConcurrent(process func(chunk int, key any, value any) bool, worker ...func(int))
RangeConcurrent 并发遍历所有键值对,内部根据分片数量自动确定协程数量。 process 是处理函数,接收分片索引、key 和 value 作为参数,返回布尔值,如果 process 返回 false,则通知所有协程终止遍历。 worker 是可选的回调函数,在启动并发处理前调用,接收分片数量作为参数。 该操作是线程安全的,对每个分片使用读锁保护,适用于需要并行处理大量数据的场景,可显著提高处理速度。 注意:遍历过程中不应修改 Map 内容,否则可能导致不可预期的结果。