mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 20:52:33 +02:00
69 lines
1.1 KiB
Go
69 lines
1.1 KiB
Go
package functional
|
|
|
|
import "sync"
|
|
|
|
func ForEachKey[K comparable, V any](obj map[K]V, do func(K)) {
|
|
for k := range obj {
|
|
do(k)
|
|
}
|
|
}
|
|
|
|
func ForEachValue[K comparable, V any](obj map[K]V, do func(V)) {
|
|
for _, v := range obj {
|
|
do(v)
|
|
}
|
|
}
|
|
|
|
func ForEachKV[K comparable, V any](obj map[K]V, do func(K, V)) {
|
|
for k, v := range obj {
|
|
do(k, v)
|
|
}
|
|
}
|
|
|
|
func ParallelForEach[T any](obj []T, do func(T)) {
|
|
var wg sync.WaitGroup
|
|
wg.Add(len(obj))
|
|
for _, v := range obj {
|
|
go func(v T) {
|
|
do(v)
|
|
wg.Done()
|
|
}(v)
|
|
}
|
|
wg.Wait()
|
|
}
|
|
|
|
func ParallelForEachKey[K comparable, V any](obj map[K]V, do func(K)) {
|
|
var wg sync.WaitGroup
|
|
wg.Add(len(obj))
|
|
for k := range obj {
|
|
go func(k K) {
|
|
do(k)
|
|
wg.Done()
|
|
}(k)
|
|
}
|
|
wg.Wait()
|
|
}
|
|
|
|
func ParallelForEachValue[K comparable, V any](obj map[K]V, do func(V)) {
|
|
var wg sync.WaitGroup
|
|
wg.Add(len(obj))
|
|
for _, v := range obj {
|
|
go func(v V) {
|
|
do(v)
|
|
wg.Done()
|
|
}(v)
|
|
}
|
|
wg.Wait()
|
|
}
|
|
|
|
func ParallelForEachKV[K comparable, V any](obj map[K]V, do func(K, V)) {
|
|
var wg sync.WaitGroup
|
|
wg.Add(len(obj))
|
|
for k, v := range obj {
|
|
go func(k K, v V) {
|
|
do(k, v)
|
|
wg.Done()
|
|
}(k, v)
|
|
}
|
|
wg.Wait()
|
|
}
|