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.

Foi útil?

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?

@Chris,

Isso é apenas como [] e [,] são definidas para a classe String.

Confira o Cadeia de API.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top