2012-04-10 7 views

Antwort

4

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?

+0

Es stellt sich heraus, dass Importdaten kein wirklich kritisches Problem in meinem Problem sind. Aber Ihr Code ist hilfreich, um meinen Code zu verbessern. Vielen Dank. Ich wundere mich immer noch, warum Rubin keine direkte Methode zum Lesen ganzer Zahlen hat. – makisfan

+1

Warum sollte Ruby eine Methode haben, ganze Zahlen zu lesen? Was ist mit Daten, Floaten, Booleans, URLs, Verzeichnissen, Dateipfaden? Warum ist ein Trennzeichen (Leerzeichen) besser als ein anderes (Kommas, Bindestriche, Zeilenumbrüche)? Als eine gute Programmiersprache bietet Ruby Ihnen allgemeine Methoden an, und es liegt an Ihnen, sie in einer vernünftigen Art und Weise zusammenzufassen. Bei der Programmierung geht es hauptsächlich um "Pfadfindung": Sie wissen, welche Daten Sie haben, welche Daten Sie haben und welche Transformationsschritte Sie durchführen können, wie Sie am einfachsten von A nach B gelangen. – Phrogz

Verwandte Themen