Wie ermittle ich die Länge einer Fixnum in Ruby?

7

In dem Skript, das ich schreibe, möchte ich die Länge eines Fixnum in Ruby finden. Ich könnte <num>.to_s.length machen, aber gibt es eine Möglichkeit, die Länge eines Fixnum direkt zu finden, ohne es in einen String umzuwandeln?

    
Orcris 22.12.2012, 18:44
quelle

6 Antworten

23
%Vor%

Sie könnten es folgendermaßen zu Fixnum hinzufügen:

%Vor%     
steenslag 22.12.2012, 19:04
quelle
5

Ruby 2.4 hat eine Methode Integer # digits , die zurückgibt ein Array mit den Ziffern.

%Vor%

BEARBEITEN:

Um negative Zahlen zu verarbeiten (danke @MatzFan), verwende den absoluten Wert. Integer # abs

%Vor%     
Santhosh 26.12.2016 17:22
quelle
4

Obwohl die top-voting-Schleife nett ist, ist sie nicht sehr Ruby und wird für große Zahlen langsam, die .to_s ist eine eingebaute Funktion und wird daher viel schneller sein. FAST universal eingebaute Funktionen werden viel schneller sein als konstruierte Schleifen oder Iteratoren.

    
holzru 23.03.2016 22:03
quelle
1

Ein anderer Weg:

%Vor%     
Cary Swoveland 08.07.2014 04:01
quelle
0

Wenn Sie Regex nicht verwenden möchten, können Sie diese Methode verwenden:

%Vor%     
CHABANON Julien 05.05.2014 15:26
quelle
0

Nebenbemerkung für Ruby 2.4 +

Ich habe einige Benchmarks für die verschiedenen Lösungen durchgeführt, und Math.log10(x).to_i + 1 ist tatsächlich viel schneller als x.to_s.length . Der Kommentar von @ Wayne Conrad ist nicht mehr aktuell. Die neue Lösung mit digits.count liegt insbesondere bei größeren Zahlen weit zurück:

%Vor%     
TheCha͢mp 19.02.2018 13:04
quelle

Tags und Links