Ruby - Conversão de Inteiro para String
Pergunta
Em Ruby, tentando imprimir os elementos individuais de uma Seqüência de caracteres está a dar-me problemas.Em vez de ver cada personagem, o que eu estou vendo seus valores ASCII em vez disso:
>> a = "0123"
=> "0123"
>> a[0]
=> 48
Eu olhei online, mas pode não encontrar nenhuma maneira de obter o original "0" de volta para fora.Eu sou um pouco novo para Ruby para eu saber o que tem para ser algo simples, mas eu simplesmente não consigo encontrá-lo.
Solução
Ou você pode converter o inteiro para o seu carácter de valor:
a[0].chr
Outras dicas
Você quer uma[0,1] em vez de[0].
Eu acredito que isso está mudando no Ruby 1.9, que "asdf"[2] produz "d", ao invés de incluir o código do caractere
Para resumir:
Este comportamento será desativada na versão 1.9, em que o personagem em si é devolvido, mas em versões anteriores, tentando fazer referência a um único caractere de uma string, por sua posição de caractere irá retornar o seu valor de caracteres (modo "ABC"[2] retorna 67)
Há um número de métodos que retornam um intervalo de caracteres de uma seqüência de caracteres (veja o Ruby docs na Cadeia método de divisão) Todas as seguintes retorno "C":
"ABC"[2,1]
"ABC"[2..2]
"ABC".slice(2,1)
Eu acho o intervalo do seletor para ser mais fácil de ler.Alguém pode me falar se é menos eficiente?
A [,] o operador retorna uma seqüência de caracteres de volta para você, é uma subseqüência de caracteres operador, onde, como o [] operador retorna o caractere que ruby trata-se de um número quando imprimi-lo.
Eu acho each_char
ou chars
que melhor descreve o que você quer.
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