96 votes

comment itérer des caractères individuels dans la chaîne Lua?

J'ai une chaîne dans Lua et je veux y parcourir des caractères individuels. Mais aucun code que j'ai essayé ne fonctionne et le manuel officiel montre seulement comment trouver et remplacer des sous-chaînes :(

 str = "abcd"
for char in str do -- error
  print( char )
end

for i = 1, str:len() do
  print( str[ i ] ) -- nil
end
 

138voto

RBerteig Points 23331

En lua 5.1, vous pouvez parcourir les caractères d'une chaîne de caractères présente dans un couple des manières.

La base de la boucle serait:

pour i = 1, #str faire
 local c = str:sub(i,i)
 -- faire quelque chose avec c
fin

Mais il peut être plus efficace d'utiliser un modèle avec string.gmatch() pour obtenir un itérateur sur les personnages:

c str:gmatch"." 
 -- faire quelque chose avec c
fin

Ou même utiliser string.gsub() pour appeler une fonction pour chaque char:

str:gsub(".", fonction(c)
 -- faire quelque chose avec c
fin)

Dans tout ce qui précède, j'ai profité du fait que l' string module est défini comme une métatable pour toutes les valeurs de chaîne, de sorte que ses fonctions peuvent être appelées en tant que membres à l'aide de l' : de la notation. J'ai aussi utilisé le (nouveau 5.1, IIRC) # pour obtenir la longueur de la chaîne.

La meilleure réponse pour votre application dépend de beaucoup de facteurs et de critères de référence sont à votre ami si la performance est d'aller à la matière.

Vous pouvez évaluer pourquoi vous avez besoin pour effectuer une itération sur les personnages, et à regarder l'un de l'expression régulière modules qui ont été liés à Lua, ou pour une approche moderne de la regarder dans Roberto lpeg module qui implémente l'Analyse de l'Expression Grammers pour Lua.

11voto

Aaron Saarela Points 2605

Si vous utilisez Lua 5, essayez:

 for i = 1, string.len(str) do
    print( string.sub(str, i, i) )
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X