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] }
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!