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

DDD
Lepaskan: 2024-11-25 06:44:15
asal
926 orang telah melayarinya

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])
Salin selepas log masuk

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
}
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan