iter
包和 range-over-func 功能。
给定两个迭代器,将它们组合在一起的正确方法是什么?
import "slices"
func main() {
a := []int{1, 2, 3, 4}
b := []int{5, 6, 7, 8}
i := slices.Values(a) // i is iter.Seq[int]
j := slices.Values(b) // j is iter.Seq[int]
// ???
}
这里的目标是按顺序迭代两个切片的元素,从
1
到 8
。貌似slices
包里没有现成的助手吧?
这是一个接受可变参数的 Concat 函数:
// Concat returns an iterator concatenating the passed in iterators.
func Concat[E any](seqs ...iter.Seq[E]) iter.Seq[E] {
return func(yield func(E) bool) {
for _, seq := range seqs {
for e := range seq {
if !yield(e) {
return
}
}
}
}
}