Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schreibe ich eine Funktion in Golang, um eine Unicode-Zeichenfolge mit nur einer Zuweisung/Operation umzukehren?

Wie schreibe ich eine Funktion in Golang, um eine Unicode-Zeichenfolge mit nur einer Zuweisung/Operation umzukehren?

王林
王林nach vorne
2024-02-14 10:30:09955Durchsuche

如何在 Golang 中编写函数来仅使用 1 个分配/操作来反转 unicode 字符串?

Der PHP-Editor Zimo führt Sie durch das Schreiben einer Funktion in Golang, um eine Unicode-Zeichenfolge mit nur einer Zuweisung/Operation umzukehren. Das Umkehren einer Zeichenfolge ist eine übliche Operation, aber in Golang können wir den Effekt auf clevere Weise mit nur einer Zuweisung/Operation erzielen. Diese Methode basiert auf der Tatsache, dass Strings unveränderlich sind. Wir können den String in ein Runen-Slice umwandeln und dann den String umkehren, indem wir die Elemente im Slice austauschen. Schauen wir uns als Nächstes die spezifische Implementierungsmethode an!

Frageninhalt

Ich muss meine eigene reverse.Reverse Simulation für Unicode-Strings schreiben. Das ist mein Code:

func Reverse(input string) string {
    runes := []rune(input)

    var result strings.Builder
    result.Grow(len(runes))

    for i := len(runes) - 1; i >= 0; i-- {
        result.WriteRune(runes[i])
    }

    return result.String()
}

Aber es ergeben sich 2 Aufgaben/Operationen:

cpu: 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz
BenchmarkReverse
BenchmarkReverse-16       297900              7014 ns/op            1792 B/op          2 allocs/op

Wie führt man nur eine Zuordnung/Operation durch? Ich weiß, es ist möglich

Und ich verstehe auch nicht warum result.Grow(len(runes)) 使 5 个分配/操作和 result.Grow(len(input)) - 1 Zuweisung/Vorgang

Workaround

Erstellen Sie strings.Builder mit der erforderlichen Kapazität. Schreibt die Runen aus der Quellzeichenfolge in umgekehrter Reihenfolge in den Builder.

func Reverse(str string) string {
    var result strings.Builder
    result.Grow(len(str))
    for len(str) > 0 {
        r, size := utf8.DecodeLastRuneInString(str)
        result.WriteRune(r)
        str = str[:len(str)-size]
    }
    return result.String()
}

https://www.php.cn/link/6acfe16b984d473723a8495a84e548b7

Diese Antwort reproduziert die Funktionalität in der Frage. Ich halte es nicht für sinnvoll, dass die Ergebnisse den Menschen als Glyphen angezeigt werden. Beispielsweise werden kombinierte Zeichen nicht wie reine Zeichenfolgen kombiniert.

Hier ist ein erfundenes Beispiel, das die Verwendung der Umkehrfunktion veranschaulicht: Bestimmte Wertesätze einer Anwendung neigen dazu, Zeichenfolgenschlüssel mit gemeinsamen Präfixen und ungewöhnlichen Suffixen zu haben. Anwendungen können die Verteilung des Zeichenfolgenraums durch Umkehren der Schlüssel verbessern.

Das obige ist der detaillierte Inhalt vonWie schreibe ich eine Funktion in Golang, um eine Unicode-Zeichenfolge mit nur einer Zuweisung/Operation umzukehren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen