Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencapai Kesetaraan Pemahaman Senarai Python dalam Go?

Bagaimana untuk Mencapai Kesetaraan Pemahaman Senarai Python dalam Go?

Susan Sarandon
Lepaskan: 2024-11-12 16:22:02
asal
516 orang telah melayarinya

How to Achieve Python's List Comprehension Equivalent in Go?

Setara dengan Pemahaman Senarai Python dalam Go

Ramai pembangun mendapati sukar untuk melaksanakan tugas yang kelihatan mudah dalam Go berbanding bahasa lain seperti Python. Satu tugas sedemikian ialah mereplikasi sintaks pemahaman senarai Python.

Untuk mencapai binaan yang setara dalam Go, pertimbangkan pendekatan berikut:

1. Menggunakan Pustaka "penapis":

Seperti yang dicadangkan oleh Rob Pike, pustaka "penapis" menyediakan kaedah yang dipanggil Choose() yang mengembalikan kepingan yang mengandungi elemen yang memenuhi syarat yang ditentukan. Contohnya:

import (
    "github.com/google/go-cmp/cmp"
    "go.opencensus.io/plugin/ochttp"
    "golang.org/x/exp/slices"
)

var (
    a = []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    b = []int{2, 4, 6, 8}
)

func TestChoose(t *testing.T) {
    result := ochttp.Choose(a, func(v int) bool { return v%2 == 0 })
    if !cmp.Equal(result, b) {
        t.Errorf("TestChoose() failed, got %v, want %v", result, b)
    }
}
Salin selepas log masuk

2. Menggunakan For Loops:

Walaupun terdapat perpustakaan seperti "penapis," Go's for loops kekal sebagai alternatif yang cekap. GoDoc untuk pustaka "penapis" secara eksplisit mengesyorkan penggunaan untuk gelung apabila kecekapan membimbangkan.

3. Menggunakan Go Generics (datang dalam Go 1.18):

Dengan pengenalan generik yang akan datang dalam Go, adalah mungkin untuk melaksanakan mapreduce menggunakan generik. Contohnya:

func MapReduce[T, V, R any](in <-chan T, out chan<- R, mapFn func(T) V, reduceFn func(V, V) R) {

    v := make(chan V, 10)
    defer close(v)

    go func() {
        for t := range in {
            v <- mapFn(t)
        }
    }()

    r := make(chan R, 10)
    defer close(r)

    go func() {
        var acc R
        for v := range v {
            acc = reduceFn(acc, v)
        }
        r <- acc
    }()

    return <-r
}
Salin selepas log masuk

Pelaksanaan ini menerima saluran jenis T, menggunakan fungsi pemetaan pada setiap elemen dan menyimpan keputusan dalam saluran jenis V. Satu lagi goroutine menggunakan saluran nilai yang dipetakan dan berulang kali menggunakan fungsi pengurangan untuk menghasilkan hasil jenis R. Hasilnya kemudian dikembalikan sebagai saluran jenis R.

Kesimpulan:

Sementara sintaks pemahaman senarai Python menyediakan cara ringkas untuk mengubah data, Go menawarkan alternatif yang cekap menggunakan untuk gelung atau perpustakaan seperti "penapis." Dengan pengenalan generik dalam Go 1.18, mekanisme transformasi data yang lebih cekap dan serba boleh akan tersedia.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kesetaraan Pemahaman Senarai Python 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