die ganzen Zahlen Unter der Annahme kann nicht negativ sein:
nums = gets.scan(/\d+/).map(&:to_i)
oder für beliebigen Eingang:
nums = gets.strip.split(/\s+/).map(&:to_i)
Der Schlüssel hier verwendet Array#map
mit einem Block für jeden Wert in dem Feld berufen, die Schaffung eines neues Array der Ergebnisse für jedes. Dann verwenden wir Symbol#to_proc
(aufgerufen durch die Und-Zeichen-Syntax von Ruby), um die to_i
-Methode für jede Zeichenfolge kurz aufzurufen.
Zum Beispiel entspricht foo.map(&:to_i)
foo.map{ |o| o.to_i }
.
bearbeiten: es wird leicht sein schneller das Array anstelle abzubilden, und teilen nur auf einem einzigen Raum, wenn Sie wissen, dass der einzige Separator ist, und nicht Symbol # to_proc zu verwenden:
nums = gets.chomp.split(' ').map!{ |o| o.to_i }
Allerdings ist es unwahrscheinlich, dass Sie hier mehr als eine geringfügige Verbesserung sehen. Bist du sicher, dass du das schneller brauchst? Was sind Ihre Daten und was sind Ihre Profilergebnisse, die zeigen, dass dies ein kritischer Ort ist, an dem Sie mehr Geschwindigkeit benötigen?
Was sind Ihre Kriterien für "besser"? Kürzer? – Phrogz
Ich brauche etwas "schneller". – makisfan
Ernsthaft? Wie viel schneller muss es sein? – Phrogz