Gibt es eine Methode in Ruby, um fixnum wie 74239 in ein Array wie [7,4,2,3,9] umzuwandeln?Lange fixe Zahl in Array umwandeln Ruby
Antwort
Sie brauchen nicht eine Rundreise durch strang Land für diese Art der Sache zu nehmen:
def digits(n)
Math.log10(n).floor.downto(0).map { |i| (n/10**i) % 10 }
end
ary = digits(74239)
# [7, 4, 2, 3, 9]
Das geht davon aus, dass n
natürlich positiv ist, eine n = n.abs
in th gleiten Der Mix kann das bei Bedarf erledigen. Wenn Sie nicht-positive Werte decken, dann:
def digits(n)
return [0] if(n == 0)
if(n < 0)
neg = true
n = n.abs
end
a = Math.log10(n).floor.downto(0).map { |i| (n/10**i) % 10 }
a[0] *= -1 if(neg)
a
end
Die divmod Verfahren verwendet werden können, die Ziffern einen nach dem anderen
def digits n
n= n.abs
[].tap do |result|
while n > 0
n,digit = n.divmod 10
result.unshift digit
end
end
end
Eine schnelle Benchmark dies schneller sein zeigte zu extrahieren als die Verwendung von log, um die Anzahl der Ziffern im voraus zu finden, die selbst schneller war als die string-basierten Methoden.
bmbm(5) do |x|
x.report('string') {10000.times {digits_s(rand(1000000000))}}
x.report('divmod') {10000.times {digits_divmod(rand(1000000000))}}
x.report('log') {10000.times {digits(rand(1000000000))}}
end
#=>
user system total real
string 0.120000 0.000000 0.120000 ( 0.126119)
divmod 0.030000 0.000000 0.030000 ( 0.023148)
log 0.040000 0.000000 0.040000 ( 0.045285)
können Sie in String konvertieren und die Zeichen-Methode verwenden:
74239.to_s.chars.map(&:to_i)
Ausgang:
[7, 4, 2, 3, 9]
Es ist ein bisschen eleganter als Splitting.
Sie können auch Array.new
statt map
verwenden:
n = 74239
s = Math.log10(n).to_i + 1 # Gets the size of n
Array.new(s) { d = n % 10; n = n/10; d }.reverse
In Ruby 2.4 wird ganze Zahlen mit einem digits method haben.
- 1. Zahl in Zeichen umwandeln?
- 2. Lange Zeichenkette in data.frame umwandeln
- 3. Monat Name in Zahl umwandeln
- 4. Parse eine lange Zahl in Java
- 5. noUiSlider lange Zahl Rundungsfehler
- 6. Umwandeln einer natürlichen Zahl auf Typenebene in eine reguläre Zahl
- 7. C++ Zeichenfolge mit Wort und Zahl in Zahl umwandeln
- 8. Epoch Times in Ruby umwandeln
- 9. Zeichenkette mit Komma in ganze Zahl umwandeln
- 10. MySQL - Zahl in englische Darstellung umwandeln
- 11. möchte negative Zahl in positive umwandeln
- 12. welche Mathematik muss ich diese Zahl umwandeln
- 13. PHP-Array - Array-Werte in Schlüssel umwandeln
- 14. String-Array-Werte in Array-Objekt umwandeln
- 15. Wie kann ich ein Datum in eine ganze Zahl umwandeln?
- 16. Vincenty Entfernung in Array umwandeln
- 17. Umwandeln einer indexierten Array
- 18. Ruby Hexadezimal in Zeichen umwandeln und drucken (Unicode Hebräisch)
- 19. ESLint --fixe Dateien nicht bearbeiten
- 20. Eine lange Textzeile mit CSS in einen Absatz umwandeln?
- 21. Eine lange Zeichenfolge in Rails umwandeln, während URLs beibehalten werden?
- 22. Fixe size Unteransicht in UiTableview Swift 2
- 23. Wie kann ich eine Zahl in Perl umwandeln?
- 24. Excel: Massentext in eine Zahl umwandeln und feste Länge beibehalten?
- 25. Convert String in int-Array in Ruby
- 26. Commandline-Eingabe in ein Array umwandeln
- 27. Inhalt der Array-Liste in String umwandeln
- 28. Wie Integer-Array in SIMD-Vektor umwandeln
- 29. JavaScript- Array-Puffer in String umwandeln
- 30. Wie man eine lange Zahl zufällig in clojure erzeugt
Scheint ziemlich verschlungen. –
@RyanBigg: Nur wenn Sie Ihre High School Mathe vergessen haben. –