Maison > développement back-end > Golang > le corps du texte

Comment puis-je accéder efficacement à une rune aléatoire dans une chaîne Go ?

DDD
Libérer: 2024-11-25 07:49:10
original
925 Les gens l'ont consulté

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

Accès efficace à l'élément runique aléatoire d'une chaîne

Dans Go, les chaînes sont représentées comme une séquence d'octets codés en UTF-8. Pour accéder à un élément runique à un index spécifique, on peut parcourir la chaîne en utilisant une boucle de plage for .... Cependant, cette méthode peut s'avérer inefficace pour un accès fréquent.

La raison de cette inefficacité est que les chaînes de Go ne sont pas directement indexées sur les runes. Pour extraire une rune, la séquence d'octets UTF-8 doit être décodée. Cette surcharge de décodage devient importante si la fonction est appelée plusieurs fois.

Pour optimiser les performances, il est recommandé d'éviter d'utiliser une chaîne et d'utiliser plutôt une []rune slice. Les tranches sont efficacement indexées, permettant un accès direct aux runes. Si le type d'entrée ne peut pas être modifié, un cache peut être implémenté pour stocker les représentations runiques décodées des chaînes.

Voici une version modifiée de la fonction fournie qui utilise un cache :

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]
}
Copier après la connexion

Le cache stocke les représentations runiques décodées des chaînes pour éviter un décodage répétitif. Cette approche peut améliorer considérablement les performances si RuneAt() est appelé avec un ensemble limité de chaînes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal