Ruby — преобразование целого числа в строку

StackOverflow https://stackoverflow.com/questions/29511

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

a[0].chr

Другие советы

Вам нужен [0,1] вместо [0].

Я считаю, что в Ruby 1.9 это изменилось, так что "asdf"[2] дает "d", а не код символа.

Обобщить:

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

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

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

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

@Крис,

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

Проверьте Строковый API.

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

Я думаю 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top