Heim > Backend-Entwicklung > Golang > So führen Sie eine String-Umkehr mit Golang durch

So führen Sie eine String-Umkehr mit Golang durch

PHPz
Freigeben: 2023-04-14 11:22:33
Original
1657 Leute haben es durchsucht

In der Golang-Programmentwicklung ist String ein sehr häufiger Datentyp. Sie sind überall, egal ob Sie Inhalte aus dem Netzwerk lesen oder Text aus einer Datei lesen, fast immer sind Zeichenfolgen im Spiel. Auch die Umkehrung von Saiten ist ein Problem, das häufig angegangen werden muss. In diesem Artikel erfahren Sie, wie Sie Golang zur String-Umkehr verwenden.

1. Grundlagen der String-Umkehr

In Golang besteht ein String aus einem oder mehreren Zeichen und jedes Zeichen wird durch einen Unicode-Codepunkt dargestellt. Zeichenfolgen in Golang sind unveränderlich, was bedeutet, dass Sie beim Versuch, ein Zeichen in einer Zeichenfolge zu ändern, tatsächlich eine neue Zeichenfolge erstellen, anstatt die ursprüngliche Zeichenfolge zu ändern. Die Umkehrung einer Zeichenfolge ist keine Ausnahme und es muss eine neue Zeichenfolge erstellt werden, um das umgekehrte Ergebnis zu speichern.

Der grundlegende String-Umkehrcode lautet wie folgt:

func ReverseString(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}
Nach dem Login kopieren

Der obige Code wandelt den String in ein Runen-Slice um, indem er den Typ []rune verwendet, sodass auf die Zeichen im String direkt zugegriffen werden kann. Verwenden Sie Doppelzeiger (i und j), um die Zeichen zu durchlaufen und das i-te Zeichen an der j-ten Position auszutauschen. []rune类型将字符串转换为rune切片,以便可以直接访问字符串中的字符。使用双指针(i 和 j) 来迭代字符,同时将第 i 个字符交换到第 j 个位置上。

二、字符串反转高级

上面的代码实现了基础的字符串反转,但是在某些情况下并不够高效。因为字符串反转会创建一个新的字符串,而创建和填充新的字符串所需的时间可能会比直接反转字符要多。

高级的字符串反转可以通过使用字节数组来优化。字节数组的长度等于原始字符串的长度,并且可以直接在原始字节数组中进行反转,从而避免了创建新字符串的时间和空间成本。在进行字符串反转时,需要将字符串转换为字节数组,但是由于Go中的字符串可以包含多个字节序列,因此在转换之前需要确定编码。下面的示例介绍了如何反转UTF-8字符串:

func ReverseString(s string) string {
    b := []byte(s)
    n := len(b)
    for i := 0; i < n/2; i++ {
        b[i], b[n-i-1] = b[n-i-1], b[i]
    }
    return string(b)
}
Nach dem Login kopieren

其中,使用了[]byte类型将字符串转换为字节数组。使用双指针(i 和 n-i-1) 来迭代字节数组,同时将第 i 个字节交换到第 n-i-1 个位置上。

三、基准测试

为了衡量两种不同的字符串反转方法的性能,下面将进行基准测试:

func BenchmarkReverseString(b *testing.B) {
    s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for i := 0; i < b.N; i++ {
        ReverseString(s)
    }
}

func BenchmarkReverseString2(b *testing.B) {
    s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for i := 0; i < b.N; i++ {
        ReverseString2(s)
    }
}
Nach dem Login kopieren

在Golang程序开发中,基准测试是测试性能的重要手段,在testing package中提供了一系列测试函数供我们使用。在这里使用了与ReverseStringReverseString2

2. Erweiterte String-Umkehrung

Der obige Code implementiert die grundlegende String-Umkehrung, ist jedoch in einigen Fällen nicht effizient genug. Da beim Umkehren der Zeichenfolge eine neue Zeichenfolge erstellt wird, kann das Erstellen und Füllen der neuen Zeichenfolge mehr Zeit in Anspruch nehmen als das direkte Umkehren der Zeichen.

Die erweiterte String-Umkehr kann durch die Verwendung von Byte-Arrays optimiert werden. Die Länge des Byte-Arrays entspricht der Länge der ursprünglichen Zeichenfolge und kann direkt im ursprünglichen Byte-Array umgekehrt werden, wodurch der Zeit- und Platzaufwand für die Erstellung einer neuen Zeichenfolge vermieden wird. Bei der String-Umkehr muss der String in ein Byte-Array konvertiert werden. Da Strings in Go jedoch mehrere Byte-Sequenzen enthalten können, muss die Codierung vor der Konvertierung festgelegt werden. Das folgende Beispiel zeigt, wie man einen UTF-8-String umkehrt:

go test -bench=.

BenchmarkReverseString-8     3509301               331 ns/op
BenchmarkReverseString2-8    45815326                25.2 ns/op
Nach dem Login kopieren
Darin wird der Typ []byte verwendet, um den String in ein Byte-Array zu konvertieren. Verwenden Sie Doppelzeiger (i und n-i-1), um über das Byte-Array zu iterieren und das i-te Byte an die n-i-1-te Position zu tauschen.

3. Benchmark-Test🎜🎜Um die Leistung von zwei verschiedenen String-Umkehrmethoden zu messen, wird das Folgende ein Benchmark-Test sein: 🎜rrreee🎜In der Golang-Programmentwicklung ist der Benchmark-Test ein wichtiges Mittel zum Testen der Leistung in Das Paket „testing“ stellt uns eine Reihe von Testfunktionen zur Verfügung. Hier werden zwei Funktionen, ReverseString und ReverseString2, zum Benchmarking der Umkehrung von UTF-8-Strings verwendet. Die Testzeichenfolge ist eine Zeichenfolge aus 26 Kleinbuchstaben und 26 Großbuchstaben. 🎜🎜Nach dem Ausführen des Benchmarks und dem Vergleich der Ergebnisse: 🎜rrreee🎜Die Ergebnisse zeigen, dass die Methode der Verwendung von Byte-Arrays für die String-Umkehr deutlich effizienter ist als die Methode der Verwendung von Runen-Slices für die String-Umkehr. 🎜🎜4. Zusammenfassung🎜🎜In diesem Artikel haben wir zwei Methoden zur String-Umkehr in Golang vorgestellt, eine verwendet Rune-Slicing und die andere verwendet Byte-Arrays. Wir stellen außerdem kurzen, aber ausführbaren Benchmark-Code zur Verfügung, um die Leistung beider Methoden zu messen. Wenn die zu verarbeitende Zeichenfolge kleiner ist, können wir die Zeichenfolge mit einfachen Methoden umkehren. Bei längeren Zeichenfolgen oder wenn effiziente Umkehroperationen erforderlich sind, sollten wir die Zeichenfolge jedoch mithilfe erweiterter Byte-Array-basierter Methoden umkehren. 🎜

Das obige ist der detaillierte Inhalt vonSo führen Sie eine String-Umkehr mit Golang durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage