Heim  >  Artikel  >  Backend-Entwicklung  >  Wie liest man Ganzzahlen aus durch Leerzeichen getrennten Eingaben in Golang: Ein rekursiver Ansatz?

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

DDD
DDDOriginal
2024-10-30 21:01:30127Durchsuche

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>

Beispielausgabe

Angenommen, die Standardeingabe enthält die Ganzzahlen:

Enter the number of integers
3
Enter the integers
23 45 66

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

[23 45 66]

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>

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!

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