Wie liest man Ganzzahlen aus durch Leerzeichen getrennten Eingaben in Golang: Ein rekursiver Ansatz?

DDD
Freigeben: 2024-10-30 21:01:30
Original
221 Leute haben es durchsucht

How to Read Integers from Space-Separated Input in Golang: A Recursive Approach?

Ganzzahlen aus durch Leerzeichen getrennten Eingaben in Golang lesen: Ein effizienter Ansatz

Beim Programmieren das Lesen einer durch Leerzeichen getrennten Menge von Ganzzahlen aus der Standardeingaben zu verarbeiten und diese effizient in einem Array zu speichern, ist eine häufige Aufgabe. Eine Möglichkeit, dies zu erreichen, ist die Verwendung einer einfachen for-Schleife. Es gibt jedoch eine Technik, die Rekursion nutzt, um den Code zu minimieren und gleichzeitig eine optimale Leistung aufrechtzuerhalten.

Rekursion ohne explizite Schleifen verwenden

Der folgende Go-Codeausschnitt zeigt, wie man liest Ganzzahlen aus der Standardeingabe ohne Verwendung von for- oder goto-Schleifen:

<code class="go">package main

import "fmt"

func main() {
    var n int
    fmt.Println(`Enter the number of integers`)
    if _, err := fmt.Scan(&n); err != nil {
        panic(err)
    }
    fmt.Println(`Enter the integers`)
    all := make([]int, n)
    ReadN(all, 0, n)
    fmt.Println(all)
}

// Recursively reads n integers into all starting from position i.
func ReadN(all []int, i, n int) {
    if n == 0 {
        return
    }
    if _, err := fmt.Scan(&all[i]); err != nil {
        panic(err)
    }
    ReadN(all, i+1, n-1)
}</code>
Nach dem Login kopieren

Beispielausgabe

Angenommen, die Standardeingabe enthält die Ganzzahlen:

Enter the number of integers
3
Enter the integers
23 45 66
Nach dem Login kopieren

Das Ausführen des Programms würde Folgendes ausgeben:

[23 45 66]
Nach dem Login kopieren

Eingabescan optimieren

Um das Eingabescannen weiter zu optimieren, sollten Sie die fmt.Scan-Funktion in ReadN durch einen benutzerdefinierten Reader ersetzen Dies ermöglicht eine schnellere Eingabeverarbeitung:

<code class="go">type reader struct {
    val int
}

func (r *reader) Read(b []byte) (int, error) {
    w, err := fmt.Scanf("%d", &r.val)
    if err != nil {
        return w, err
    }
    b[0] = byte(r.val)
    return 1, err
}</code>
Nach dem Login kopieren

In dieser optimierten Implementierung wird ein benutzerdefinierter Reader mit einem Feldwert erstellt, um den ganzzahligen Wert zu speichern. Die Read-Methode verwendet fmt.Scanf, um eine Ganzzahl aus der Standardeingabe zu lesen und sie in val zu speichern. Beim Lesen aus dem benutzerdefinierten Reader wird nur ein Byte verarbeitet, was den Overhead erheblich reduziert.

Durch die Integration dieser Techniken können Sie Sätze von Ganzzahlen aus der Standardeingabe in Golang effizient lesen und so die Leistung maximieren und gleichzeitig die Codekomplexität minimieren.

Das obige ist der detaillierte Inhalt vonWie liest man Ganzzahlen aus durch Leerzeichen getrennten Eingaben in Golang: Ein rekursiver Ansatz?. 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