Maison  >  Article  >  développement back-end  >  Quelle est la différence entre itérer sur une chaîne en utilisant « for range » et une tranche de rune, et pourquoi cette différence se produit-elle ?

Quelle est la différence entre itérer sur une chaîne en utilisant « for range » et une tranche de rune, et pourquoi cette différence se produit-elle ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 07:19:28724parcourir

What is the difference between iterating over a string using `for range` and a rune slice, and why does this difference occur?

Étendue sur des chaînes et des tranches de runes : différences et similitudes

Question

Lors de l'itération une chaîne utilisant for range et une tranche de rune ([]rune(str)), on pourrait s'attendre à des résultats similaires. Il existe cependant une différence subtile entre les deux approches. Pouvez-vous l'identifier et expliquer pourquoi cela se produit ?

Réponse

Alors que les boucles for range sur les chaînes et les tranches runiques donnent le même résultat pour les caractères de base (par exemple, ASCII ), une différence apparaît lorsqu'il s'agit de caractères multi-octets.

Indexation de chaînes

Les chaînes sont essentiellement des séquences d'octets. L'indexation d'une chaîne est appropriée pour manipuler des octets ou pour traiter des caractères à un octet. Cependant, l'indexation peut être problématique lorsque vous travaillez avec des caractères multi-octets.

Boucles de plage sur les chaînes

La boucle de plage for sur les chaînes se comporte de manière unique. Il combine les caractéristiques des tranches d'octets et de runes.

  • L'index i indique la position de l'octet du début du point de code actuel.
  • La variable c représente une rune, potentiellement composé de plusieurs octets.

Ce comportement spécial des boucles for range sur des chaînes signifie que l'index i peut incrémenter de plus d'un au cours des itérations, en particulier lorsque la chaîne contient des caractères multi-octets.

Conclusion

Lorsque vous travaillez avec des caractères multi-octets, le choix entre l'étendue de la chaîne ou sa tranche runique dépend du comportement souhaité. Pour manipuler des octets, l'indexation d'une chaîne convient. Pour travailler avec des caractères ou des points de code, utiliser []rune(str) et parcourir dessus fournit des résultats plus clairs et plus intuitifs.

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!

Déclaration:
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