2009-05-18 3 views
8

При чтении другого вопроса здесь, при создании службы сокращения URL-адресов, было предложено взять идентификатор строки, а затем преобразовать ее в базу 62 (от 0 до 9, от a до z и от A до Z). Существует ли стандартная функция для этого в Ruby?Есть ли функция radix в рубине?

Редактировать: Не уверен, что я был достаточно ясен.

Что-то вроде этого: 123456.radix (62)

должны дать базу 62 из 123456

Я имею в виду писать одно, если он еще не существует.

ответ

9

to_s метод Рубиновых целых классы имеет необязательный параметр, указывающий базу, что-то вроде:

Однако он принимает только значение от 2 до 36, как поразрядные.

This snippet может быть хорошим стартовым местом, если вы хотите написать собственный кодер. Также есть base62 Ruby Gem, который добавляет методы для кодирования и декодирования в base62.

5

Поскольку мне недавно нужно было использовать радики в Ruby, и так как это первый результат для «Ruby radix», я подумал, что хочу отметить, что сейчас для работы с радиками есть a gem. Вот как пример кода в OP, используя его:

require 'radix' 
SIXTYTWO = ('0'..'9').to_a + ('a'..'z').to_a + ('A'..'Z').to_a 
123456.b(62).to_s(SIXTYTWO) 

SIXTYTWO массив необходим, потому что камень не делает никаких предположений о том, какие символы использовать для кодирования результата.