Heim >Backend-Entwicklung >Golang >Wie kann ich effizient auf eine zufällige Rune in einem Go-String zugreifen?

Wie kann ich effizient auf eine zufällige Rune in einem Go-String zugreifen?

DDD
DDDOriginal
2024-11-25 07:49:10934Durchsuche

How Can I Efficiently Access a Random Rune in a Go String?

Effizienter Zugriff auf zufällige Runenelemente einer Zeichenfolge

In Go werden Zeichenfolgen als Folge von UTF-8-codierten Bytes dargestellt. Um auf ein Runenelement an einem bestimmten Index zuzugreifen, kann man die Zeichenfolge mithilfe einer for ... Range-Schleife durchlaufen. Allerdings kann diese Methode bei häufigem Zugriff ineffizient sein.

Der Grund für diese Ineffizienz ist, dass Gos Strings nicht direkt über Runen indiziert werden. Um eine Rune zu extrahieren, muss die UTF-8-Bytesequenz dekodiert werden. Dieser Dekodierungsaufwand wird erheblich, wenn die Funktion mehrmals aufgerufen wird.

Um die Leistung zu optimieren, wird empfohlen, die Verwendung einer Zeichenfolge zu vermeiden und stattdessen ein []rune-Slice zu verwenden. Slices werden effizient indiziert und ermöglichen so den direkten Zugriff auf Runen. Wenn der Eingabetyp nicht geändert werden kann, kann ein Cache implementiert werden, um dekodierte []Runendarstellungen von Zeichenfolgen zu speichern.

Hier ist eine modifizierte Version der bereitgestellten Funktion, die einen Cache verwendet:

var cache = map[string][]rune{}

func RuneAt(s string, idx int) rune {
    rs := cache[s]
    if rs == nil {
        rs = []rune(s)
        cache[s] = []rune(s)
    }
    if idx >= len(rs) {
        return 0
    }
    return rs[idx]
}

Der Cache speichert die dekodierten []Rune-Darstellungen von Zeichenfolgen, um eine wiederholte Dekodierung zu vermeiden. Dieser Ansatz kann die Leistung erheblich verbessern, wenn RuneAt() mit einem begrenzten Satz von Zeichenfolgen aufgerufen wird.

Das obige ist der detaillierte Inhalt vonWie kann ich effizient auf eine zufällige Rune in einem Go-String zugreifen?. 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