В ruby ​​есть функция radix? - PullRequest
8 голосов
/ 19 мая 2009

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

Edit: Не уверен, что я был достаточно ясен.

Примерно так: 123456.radix (62)

должно дать основание 62 из 123456.

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

Ответы [ 3 ]

9 голосов
/ 19 мая 2009

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

123456.to_s(16)

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

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

5 голосов
/ 05 июня 2011

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

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

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

0 голосов
/ 06 апреля 2018

Не удалось открыть ссылки на кодировочный камень base62, а также не нравится функциональность radix gem. ТАК нашел это быстрое и простое решение для кодировок base62:

https://github.com/steventen/base62-rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...