如何将两个Go 1.23 iter.Seq[E]连接在一起?

问题描述 投票:0回答:1

Go 1.23 附带了新的

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
包里没有现成的助手吧?

go iterator
1个回答
0
投票

这是一个接受可变参数的 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
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.