Wie kann ich mit „fmt.Fscan()' mehrere Zahlen effizient in ein Go-Slice einlesen?

DDD
Freigeben: 2024-11-25 06:44:15
Original
927 Leute haben es durchsucht

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

Parsen von Zahlen aus der Standardeingabe in Go

Bei der Arbeit mit mehreren numerischen Eingaben ermöglicht Go Entwicklern die Verwendung mehrerer Variablen zur Erfassung einzelner Werte. Was aber, wenn Sie diesen Prozess vereinfachen und alle Zahlen in einem einzigen Array oder Slice speichern möchten?

Bedenken Sie den folgenden Codeausschnitt:

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

Dieser Code liest effizient zwei Zahlen und speichert sie sie in der Zahlenscheibe. Wenn Sie jedoch eine große Anzahl von Eingaben haben, kann dieser Ansatz ausführlich werden.

Können Sie Zahlen mit fmt.Fscan() direkt in ein Slice einlesen?

Leider unterstützt das fmt-Paket das Scannen in Slices nicht nativ. Um diese Einschränkung zu überwinden, können Sie eine benutzerdefinierte Dienstprogrammfunktion erstellen, um die Adressen aller Slice-Elemente in ein Array von Schnittstellen zu packen:

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

Diese Funktion iteriert durch das Slice und erstellt ein Array von Zeigern auf jedes Element .

Mit der Funktion packAddrs() in ein Slice scannen

Mit der Funktion packAddrs() können Sie kann jetzt in ein Slice wie folgt scannen:

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

Die Funktion packAddrs() wandelt das Slice in ein Array von Schnittstellen um, sodass fmt.Fscan() in jedes Element scannen kann.

Beispiel mit fmt.Sscan() zum Testen

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

In diesem Beispiel teste ich den Code mit fmt.Sscan(). Es nimmt eine Zeichenfolge als Eingabe und gibt die gescannten Werte zurück. Die Ausgabe dieses Codes ist:

[1 3 5 7 9] 5 <nil>
Nach dem Login kopieren

Dies zeigt, wie Sie mithilfe der Dienstprogrammfunktion packAddrs() effizient mehrere Zahlen in ein Slice einlesen können.

Das obige ist der detaillierte Inhalt vonWie kann ich mit „fmt.Fscan()' mehrere Zahlen effizient in ein Go-Slice einlesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage