Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Membaca Berbilang Nombor dengan Cekap ke dalam Go Slice Menggunakan `fmt.Fscan()`?

Bagaimanakah Saya Boleh Membaca Berbilang Nombor dengan Cekap ke dalam Go Slice Menggunakan `fmt.Fscan()`?

DDD
DDDasal
2024-11-25 06:44:15944semak imbas

How Can I Efficiently Read Multiple Numbers into a Go Slice Using `fmt.Fscan()`?

Menghuraikan Nombor daripada Input Standard dalam Go

Apabila bekerja dengan berbilang input angka, Go membenarkan pembangun menggunakan berbilang pembolehubah untuk menangkap nilai individu. Walau bagaimanapun, bagaimana jika anda ingin memudahkan proses ini dan menyimpan semua nombor dalam tatasusunan atau kepingan tunggal?

Pertimbangkan coretan kod berikut:

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])

Kod ini membaca dua nombor dan menyimpan dengan cekap mereka dalam kepingan nombor. Walau bagaimanapun, jika anda mempunyai bilangan input yang banyak, pendekatan ini boleh menjadi lebih jelas.

Bolehkah anda membaca nombor terus ke dalam kepingan menggunakan fmt.Fscan()?

Malangnya, pakej fmt tidak menyokong pengimbasan ke dalam kepingan. Untuk mengatasi had ini, anda boleh mencipta fungsi utiliti tersuai untuk membungkus alamat semua elemen keping ke dalam tatasusunan antara muka:

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}

Fungsi ini berulang melalui kepingan, mencipta tatasusunan penunjuk kepada setiap elemen .

Menggunakan fungsi packAddrs() untuk mengimbas ke dalam kepingan

Dengan Fungsi packAddrs(), kini anda boleh mengimbas ke dalam kepingan seperti ini:

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)

Fungsi packAddrs() menukarkan kepingan itu kepada pelbagai antara muka, membenarkan fmt.Fscan() mengimbas ke dalam setiap elemen.

Contoh menggunakan fmt.Sscan() untuk ujian

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)

Dalam contoh ini, saya sedang menguji kod menggunakan fmt.Sscan(). Ia memerlukan rentetan sebagai input dan mengembalikan nilai yang diimbas. Output kod ini ialah:

[1 3 5 7 9] 5 <nil>

Ini menunjukkan cara anda boleh membaca berbilang nombor ke dalam kepingan dengan cekap dengan menggunakan fungsi utiliti packAddrs().

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Berbilang Nombor dengan Cekap ke dalam Go Slice Menggunakan `fmt.Fscan()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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