首页  >  文章  >  后端开发  >  如何在 Go 中实现仅输出不同值的通道?

如何在 Go 中实现仅输出不同值的通道?

Barbara Streisand
Barbara Streisand原创
2024-10-28 08:20:02242浏览

How do you implement a channel in Go that outputs only distinct values?

Go 中的不同通道实现

在 Go 中,实现输出不同值的通道需要一种机制来跟踪先前看到的值。

一种常见的方法是使用地图数据结构,如答案中所建议的:

func UniqueGen(min, max int) <-chan int {
    m := make(map[int]struct{}, max-min)
    ch := make(chan int)
    go func() {
        for i := 0; i < 1000; i++ {
            v := min + rand.Intn(max)
            if _, ok := m[v]; !ok {
                ch <- v
                m[v] = struct{}{}
            }
        }
        close(ch)
    }()

    return ch
}

此函数生成一个通道,该通道在指定范围内生成最多 1000 个不同的整数。它维护一个映射,其中的键代表迄今为止看到的值。如果遇到新值(映射中不存在),则会在通道上发送该值,并更新映射以记录其出现。

至于内存泄漏问题,请使用映射来实现此目的通常被认为是内存高效的。 Go 中的映射引用键值,因此内存消耗与遇到的不同值的数量保持正比。但是,需要注意的是,映射将继续保留对先前值的引用,因此,如果不同值的数量变得非常大,它仍然可能会消耗大量内存。

以上是如何在 Go 中实现仅输出不同值的通道?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn