Ruby - конвертировать целое число в строку - PullRequest
16 голосов
/ 27 августа 2008

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

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

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

Ответы [ 7 ]

15 голосов
/ 27 августа 2008

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

a[0].chr
7 голосов
/ 27 августа 2008

Вы хотите [0,1] вместо [0].

6 голосов
/ 27 августа 2008

Я считаю, что в Ruby 1.9 это меняется так, что «asdf» [2] возвращает «d», а не код символа

5 голосов
/ 02 сентября 2008

Подведем итог:

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

Существует ряд методов, которые возвращают диапазон символов из строки (см. Документацию по Ruby в String метод среза ). Все приведенные ниже возвращают "C":

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

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

1 голос
/ 27 августа 2008

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

1 голос
/ 27 августа 2008

@ Chris

Вот как [] и [,] определены для класса String.

Проверьте String API .

0 голосов
/ 25 июня 2015

Я думаю 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...