2008-08-27 2 views
16

В Ruby попытка распечатать отдельные элементы строки вызывает у меня проблемы. Вместо того, чтобы каждый символ, я вижу их значения ASCII вместо:Ruby - преобразовать целое число в строку

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

Я посмотрел в Интернете, но не могу найти способ, чтобы получить оригинальный «0» обратно из него. Я немного новичок в Ruby, я знаю, что это должно быть что-то простое, но я просто не могу найти его.

ответ

15

Или вы можете преобразовать целое число в его персонаже значение:

a[0].chr 
6

Я считаю, что это изменение в Ruby 1.9 таким образом, что "ASDF" [2] дает "D", а не код символа

1

код [,] оператор возвращает строку обратно к вам, это оператор подстроки, где, как оператор [] возвращает символ, который При распечатке рубина обрабатывается как номер.

5

Резюмируя:

Такое поведение будет уходить в версии 1.9, в котором сам персонаж возвращается, но и в предыдущих версиях, пытаясь ссылаться на один символ строки его позиции символа будет возвращать его (так что «ABC» [2] возвращает 67)

Существует несколько методов, которые возвращают диапазон символов из строки (см. документы Ruby на String slice method). Все следующие возвращения «C» :

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

Я считаю, что селектор диапазона проще всего читать. Может ли кто-нибудь говорить о том, менее эффективен ли он?

0

Я думаю, each_char или chars лучше описывает, что вы хотите.

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