美文网首页
懒加载遍历

懒加载遍历

作者: funcx | 来源:发表于2020-01-14 17:03 被阅读0次
package main

import "log"

func main() {
    nexta := nextA([][]int{
        []int{1, 2, 3},
        []int{4, 5, 6},
        []int{7, 8},
    })
    for {
        v, ok := nexta()
        if !ok {
            break
        }
        log.Println("v:", v)
    }
}

func nextA(ss [][]int) func() (int, bool) {
    idx := -1
    ssIdx := 0
    ca := []int{}
    return func() (i int, b bool) {
        if len(ca) == 0 {
            ca = ss[ssIdx]
        }
        idx++
        if len(ca) <= idx {
            //尝试补充数组
            ssIdx++
            if len(ss) > ssIdx {
                ca = ss[ssIdx]
                idx = 0
                goto HERE
            }
            return 0, false
        }
    HERE:
        return ca[idx], true
    }
}

相关文章

网友评论

      本文标题:懒加载遍历

      本文链接:https://www.haomeiwen.com/subject/qeyaactx.html