Heim >Backend-Entwicklung >Golang >Wie kann ich effizient auf zufällige Runen in Go-Strings zugreifen, ohne For-Schleifen zu verwenden?
Zugriff auf zufällige Runenelemente in Strings
Problem
Wie können zufällige Runenelemente innerhalb eines Auf die Zeichenfolge kann effizient zugegriffen werden, ohne auf „for ... range“ angewiesen zu sein. Schleifen?
Hintergrund
Go-Strings speichern UTF-8-codierte Bytesequenzen. Während „for ... range“-Schleifen ein effizientes Dekodieren und Abrufen von Runen ermöglichen, ist der Zugriff auf Runen über eine direkte Funktion wie „str.At(i)“ nicht verfügbar. Dies führt dazu, dass Entwickler nach alternativen Methoden für den häufigen Runenzugriff suchen.
Lösung
Wie in der bereitgestellten Antwort erwähnt, gelten die folgenden Einschränkungen:
Empfehlung
Zur Leistungsoptimierung sollten Sie die Konvertierung von Eingabezeichenfolgen in ein Runensegment in Betracht ziehen ([] Rune), wenn der Runenzugriff häufig erforderlich ist. Im Gegensatz zu Strings, bei denen es sich praktisch um schreibgeschützte Byte-Slices handelt, ermöglichen Runen-Slices eine effiziente Indizierung.
Alternative
Wenn eine Eingabekonvertierung nicht möglich ist, kann ein Cache implementiert werden um Zeichenfolgen den entsprechenden Runenabschnitten zuzuordnen. Dies verbessert die Leistung in Fällen, in denen es um eine kleine Menge wiederkehrender Zeichenfolgen geht. Bei eindeutigen oder seltenen Zeichenfolgen kann das Caching jedoch ineffizient werden und übermäßig viel Speicher verbrauchen.
Beispiel
Der folgende Codeausschnitt zeigt eine einfache Cache-Implementierung für den Runenabruf:
import ( "fmt" "sync" ) var cache = sync.Map{} func RuneAt(s string, idx int) rune { rs, ok := cache.Load(s) if !ok { rs = []rune(s) cache.Store(s, rs) } if idx >= len(rs) { return 0 } return rs[idx] } func main() { str := "你好,世界!" for i := 0; i < len(str); i++ { fmt.Printf("%c ", RuneAt(str, i)) } }
Das obige ist der detaillierte Inhalt vonWie kann ich effizient auf zufällige Runen in Go-Strings zugreifen, ohne For-Schleifen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!