86 lines
3.1 KiB
Go
86 lines
3.1 KiB
Go
package slice
|
|
|
|
// Each 根据传入的 abort 遍历 slice,如果 iterator 返回值与 abort 相同,则停止遍历
|
|
func Each[V any](abort bool, slice []V, iterator func(index int, item V) bool) {
|
|
for i := 0; i < len(slice); i++ {
|
|
if iterator(i, slice[i]) == abort {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// EachT 与 Each 的功能相同,但是 abort 被默认为 true
|
|
func EachT[V any](slice []V, iterator func(index int, item V) bool) {
|
|
Each(true, slice, iterator)
|
|
}
|
|
|
|
// EachF 与 Each 的功能相同,但是 abort 被默认为 false
|
|
func EachF[V any](slice []V, iterator func(index int, item V) bool) {
|
|
Each(false, slice, iterator)
|
|
}
|
|
|
|
// EachReverse 根据传入的 abort 从后往前遍历 slice,如果 iterator 返回值与 abort 相同,则停止遍历
|
|
func EachReverse[V any](abort bool, slice []V, iterator func(index int, item V) bool) {
|
|
for i := len(slice) - 1; i >= 0; i-- {
|
|
if iterator(i, slice[i]) == abort {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// EachReverseT 与 EachReverse 的功能相同,但是 abort 被默认为 true
|
|
func EachReverseT[V any](slice []V, iterator func(index int, item V) bool) {
|
|
EachReverse(true, slice, iterator)
|
|
}
|
|
|
|
// EachReverseF 与 EachReverse 的功能相同,但是 abort 被默认为 false
|
|
func EachReverseF[V any](slice []V, iterator func(index int, item V) bool) {
|
|
EachReverse(false, slice, iterator)
|
|
}
|
|
|
|
// EachResult 根据传入的 abort 遍历 slice,得到遍历的结果,如果 iterator 返回值中的 bool 值与 abort 相同,则停止遍历,并返回当前已积累的结果
|
|
func EachResult[V any, R any](abort bool, slice []V, iterator func(index int, item V) (R, bool)) []R {
|
|
var result []R
|
|
for i := 0; i < len(slice); i++ {
|
|
r, ok := iterator(i, slice[i])
|
|
result = append(result, r)
|
|
if ok == abort {
|
|
break
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// EachResultT 与 EachResult 的功能相同,但是 abort 被默认为 true
|
|
func EachResultT[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R {
|
|
return EachResult(true, slice, iterator)
|
|
}
|
|
|
|
// EachResultF 与 EachResult 的功能相同,但是 abort 被默认为 false
|
|
func EachResultF[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R {
|
|
return EachResult(false, slice, iterator)
|
|
}
|
|
|
|
// EachResultReverse 根据传入的 abort 从后往前遍历 slice,得到遍历的结果,如果 iterator 返回值中的 bool 值与 abort 相同,则停止遍历,并返回当前已积累的结果
|
|
func EachResultReverse[V any, R any](abort bool, slice []V, iterator func(index int, item V) (R, bool)) []R {
|
|
var result []R
|
|
for i := len(slice) - 1; i >= 0; i-- {
|
|
r, ok := iterator(i, slice[i])
|
|
result = append(result, r)
|
|
if ok == abort {
|
|
break
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// EachResultReverseT 与 EachResultReverse 的功能相同,但是 abort 被默认为 true
|
|
func EachResultReverseT[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R {
|
|
return EachResultReverse(true, slice, iterator)
|
|
}
|
|
|
|
// EachResultReverseF 与 EachResultReverse 的功能相同,但是 abort 被默认为 false
|
|
func EachResultReverseF[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R {
|
|
return EachResultReverse(false, slice, iterator)
|
|
}
|