48 lines
1.6 KiB
Go
48 lines
1.6 KiB
Go
package hash
|
||
|
||
// Each 根据传入的 abort 遍历 m,如果 iterator 返回值与 abort 相同,则停止遍历
|
||
func Each[K comparable, V any](abort bool, m map[K]V, iterator func(i int, key K, item V) bool) {
|
||
i := 0
|
||
for k, v := range m {
|
||
if iterator(i, k, v) == abort {
|
||
break
|
||
}
|
||
i++
|
||
}
|
||
}
|
||
|
||
// EachT 与 Each 的功能相同,但是 abort 被默认为 true
|
||
func EachT[K comparable, V any](m map[K]V, iterator func(i int, key K, item V) bool) {
|
||
Each(true, m, iterator)
|
||
}
|
||
|
||
// EachF 与 Each 的功能相同,但是 abort 被默认为 false
|
||
func EachF[K comparable, V any](m map[K]V, iterator func(i int, key K, item V) bool) {
|
||
Each(false, m, iterator)
|
||
}
|
||
|
||
// EachResult 根据传入的 abort 遍历 m,得到遍历的结果,如果 iterator 返回值中的 bool 值与 abort 相同,则停止遍历,并返回当前已积累的结果
|
||
func EachResult[K comparable, V any, R any](abort bool, m map[K]V, iterator func(i int, key K, item V) (R, bool)) []R {
|
||
var result []R
|
||
i := 0
|
||
for k, v := range m {
|
||
r, ok := iterator(i, k, v)
|
||
result = append(result, r)
|
||
if ok == abort {
|
||
break
|
||
}
|
||
i++
|
||
}
|
||
return result
|
||
}
|
||
|
||
// EachResultT 与 EachResult 的功能相同,但是 abort 被默认为 true
|
||
func EachResultT[K comparable, V any, R any](m map[K]V, iterator func(i int, key K, item V) (R, bool)) []R {
|
||
return EachResult(true, m, iterator)
|
||
}
|
||
|
||
// EachResultF 与 EachResult 的功能相同,但是 abort 被默认为 false
|
||
func EachResultF[K comparable, V any, R any](m map[K]V, iterator func(i int, key K, item V) (R, bool)) []R {
|
||
return EachResult(false, m, iterator)
|
||
}
|