2008-08-27 11 views
16

En Ruby, tratando de imprimir los elementos individuales de una cadena me está dando problemas. En lugar de ver cada personaje, estoy viendo sus valores ASCII en su lugar:Ruby - Conversión de entero a cadena

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

He mirado en línea, pero no puedo encontrar ninguna manera de conseguir el original "0" a salir de ella. Soy un poco nuevo para Ruby, sé que tiene que ser algo simple, pero parece que no puedo encontrarlo.

Respuesta

15

O puede convertir el número entero a su valor de carácter:

a[0].chr 
7

Desea un [0,1] en lugar de un [0].

6

Creo que este es el cambio en Ruby 1.9 de tal manera que "asdf" [2] se obtiene "d" en lugar del código de caracteres

1

@Chris,

Así es como [] y [,] se definen para la clase String.

Compruebe hacia fuera el String API.

1

El [,] operador devuelve una cadena de nuevo a usted, es un operador de subcadena, en tanto que el operador [] devuelve el carácter que ruby se trata como un número al imprimirlo.

5

En resumen:

Este comportamiento se va a desaparecer en la versión 1.9, en la que se devuelve el personaje en sí, pero en versiones anteriores, intentando hacer referencia a un único carácter de una cadena por su posición de carácter devolverá su valor de carácter (por lo que "ABC" [2] devuelve 67)

Hay una serie de métodos que devuelven un rango de caracteres de una cadena (vea los documentos de Ruby en la cadena slice method). Todos los siguientes devuelven "C" :

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

Creo que el selector de rango es el más fácil de leer. ¿Alguien puede decir si es menos eficiente?

0

Creo que each_char o chars describe mejor lo que quiere.

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