Question

Dans Ruby, essayer d'imprimer les éléments individuels d'une chaîne me pose problème.Au lieu de voir chaque caractère, je vois plutôt leurs valeurs ASCII :

>> a = "0123"
=> "0123"
>> a[0]
=> 48

J'ai regardé en ligne mais je n'ai trouvé aucun moyen de récupérer le "0" d'origine.Je suis un peu nouveau sur Ruby et je sais que cela doit être quelque chose de simple mais je n'arrive pas à le trouver.

Était-ce utile?

La solution

Ou vous pouvez convertir l'entier en sa valeur de caractère :

a[0].chr

Autres conseils

Vous voulez un[0,1] au lieu d'un[0].

Je crois que cela change dans Ruby 1.9, de sorte que "asdf"[2] donne "d" plutôt que le code de caractère

Résumer:

Ce comportement disparaîtra dans la version 1.9, dans laquelle le caractère lui-même est renvoyé, mais dans les versions précédentes, essayer de référencer un seul caractère d'une chaîne par sa position de caractère renverra sa valeur de caractère (donc "ABC"[2] renvoie 67)

Il existe un certain nombre de méthodes qui renvoient une plage de caractères à partir d'une chaîne (voir la documentation Ruby sur String méthode de tranche) Tous les éléments suivants renvoient "C" :

"ABC"[2,1] 
"ABC"[2..2]
"ABC".slice(2,1)

Je trouve que le sélecteur de plage est le plus simple à lire.Quelqu'un peut-il dire si c'est moins efficace ?

@Chris,

C'est exactement ainsi que [] et [,] sont définis pour la classe String.

Vérifiez API de chaîne.

L'opérateur [,] vous renvoie une chaîne, c'est un opérateur de sous-chaîne, tandis que l'opérateur [] renvoie le caractère que Ruby traite comme un nombre lors de son impression.

Je pense each_char ou chars décrit mieux ce que vous voulez.

irb(main):001:0> a = "0123"
=> "0123"
irb(main):002:0> Array(a.each_char)
=> ["0", "1", "2", "3"]
irb(main):003:0> puts Array(a.each_char)
0
1
2
3
=> nil
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top