Bagaimana untuk Mencipta Saluran Integer Unik dalam Go?

Linda Hamilton
Lepaskan: 2024-10-26 18:50:30
asal
303 orang telah melayarinya

How to Create a Channel of Unique Integers in Go?

Mencipta Saluran Berbeza dalam Go

Dalam soalan pengaturcaraan ini, seorang pemula dalam Go mencari pendekatan yang cekap untuk menentukan saluran yang menghasilkan nilai unik . Keperluan khusus adalah untuk mencipta saluran yang menerima nilai integer dan hanya menghantar integer yang berbeza. Matlamatnya adalah untuk mengelakkan integer pendua dalam output.

Salah satu respons mencadangkan menggunakan peta untuk menyimpan nilai yang dihantar sebelum ini untuk mencapai fungsi ini. Walaupun kaedah ini boleh menghapuskan nilai pendua dengan berkesan, penggunaan memori adalah pertimbangan. Struktur data peta memerlukan memperuntukkan dan mengekalkan koleksi pasangan nilai kunci, yang berpotensi menyebabkan kebocoran memori jika tidak diurus dengan teliti.

Untuk menyediakan penyelesaian praktikal, coretan kod berikut memperkenalkan fungsi UniqueGen, yang menjana saluran integer unik dalam julat yang ditentukan:

<code class="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
}</code>
Salin selepas log masuk

Fungsi UniqueGen menggunakan peta untuk merekodkan integer yang dihantar. Ia memulakan goroutine yang berulang kali menjana integer dalam julat yang ditentukan. Untuk setiap nilai yang dijana, fungsi menyemak sama ada ia telah dihantar dengan mencarinya dalam peta. Jika tidak, ia menghantar integer ke atas saluran dan merekodkannya dalam peta. Proses ini menapis nilai pendua dengan berkesan, memastikan hanya integer berbeza dihantar melalui saluran.

Menggunakan fungsi UniqueGen, kes ujian berikut boleh dilaksanakan untuk menunjukkan gelagat:

<code class="go">func TestShouldReturnDistinctValues(t *testing.T) {
    var c = make([]chan int)

    c <- UniqueGen(1, 1000)

    for e := range c {
        // only print distinct values 
        fmt.println(e)
    }
}</code>
Salin selepas log masuk

Kes ujian ini akan menjana saluran 1000 integer unik dan mencetaknya ke konsol. Dengan menggunakan fungsi UniqueGen, ujian boleh memastikan bahawa ia menghasilkan nilai yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Saluran Integer Unik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!