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])
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 }
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)
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)
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>
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!