Heim >Backend-Entwicklung >Golang >Wie kann ich effizient auf eine zufällige Rune in einem Go-String zugreifen?
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!