2009-05-18 14 views
8

Beim Lesen einer anderen Frage wurde beim Erstellen eines URL-Verkürzungsdienstes vorgeschlagen, die ID der Zeile zu übernehmen und sie dann in die Basis 62 zu konvertieren (0 bis 9, a bis z und A bis Z). Gibt es eine Standardfunktion, um dies in Ruby zu erreichen?Gibt es eine Radix-Funktion in Ruby?

Edit: Nicht sicher, ob ich klar genug war.

Etwas wie folgt aus: 123456.radix (62)

sollte die Basis 62 von 123456

geben Ich denke, eine zu schreiben, wenn es nicht bereits vorhanden ist.

Antwort

9

to_s Die Methode in Ruby integer Klassen hat einen optionalen Parameter, der die Basis, so etwas wie die Angabe:

Es kann jedoch akzeptiert nur Werte von 2 bis 36 als radix.

This snippet könnte ein guter Ausgangspunkt sein, wenn Sie Ihren eigenen Encoder schreiben möchten. Es gibt auch eine base62 Ruby Gem, die Methoden für die Codierung und Decodierung in base62 hinzufügt.

5

Da ich vor kurzem Radixes in Ruby verwenden musste, und da dies das erste Ergebnis für 'Ruby Radix' ist, dachte ich, dass es jetzt a gem für das Arbeiten mit Radixen gibt. Hier ist, wie die OP Beispiel codieren es mit:

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

Die SIXTYTWO Array benötigt werden, da die Perle keine Annahmen macht, um welche Zeichen das Ergebnis zu kodieren zu verwenden.

Verwandte Themen