IはルビのSTDINから整数の行を読み込む効率的な方法は何ですか?
STDIN.gets.chomp.split(" ")
を試み、その後整数にアレイ内の各要素を変換しています。
しかし、もっと良い解決策があるはずです。
IはルビのSTDINから整数の行を読み込む効率的な方法は何ですか?
STDIN.gets.chomp.split(" ")
を試み、その後整数にアレイ内の各要素を変換しています。
しかし、もっと良い解決策があるはずです。
整数と仮定すると、負にすることはできません。
nums = gets.scan(/\d+/).map(&:to_i)
したり、任意の入力のために:
nums = gets.strip.split(/\s+/).map(&:to_i)
ここで作成、アレイ内の各値のブロックを呼び出すためにArray#map
を用いて使用されるキーそれぞれの結果の新しい配列。次に、Symbol#to_proc
(Rubyのアンパサンド構文で呼び出されます)を使用して、各文字列のto_i
メソッドを簡潔に呼び出します。
たとえば、foo.map(&:to_i)
は、foo.map{ |o| o.to_i }
に相当します。
編集:あなたがそれが唯一の区切りである知っている場合のみ、単一のスペース上の場所でのアレイ、および分割をマッピングし、シンボル#のto_procを使用しないように少し速くなります。
nums = gets.chomp.split(' ').map!{ |o| o.to_i }
ただし、ここでの改善はほとんど見られません。あなたはこれをもっと速く必要としていることは確かですか?あなたのデータは何ですか?そして、あなたのプロファイリングの結果は、これがよりスピードを必要とする重要な場所であることを示していますか?
私の問題では、インポートデータは本当に重要な問題ではないことが判明しました。しかし、あなたのコードは私のコードを改善するのに役立ちます。ありがとうございました。なぜルビーが整数を読む直接の方法を持っていないのか不思議です。 – makisfan
Rubyに「整数を読み込む」メソッドが必要なのはなぜですか?日付、浮動小数点数、ブール値、URL、ディレクトリ、ファイルパスはどうですか?区切り文字(スペース)が別の区切り文字(コンマ、ハイフン、改行)よりも優れているのはなぜですか?優れたプログラミング言語として、Rubyは汎用メソッドを提供しています。また、それを合理的な方法で組み合わせることができます。プログラミングとは、主に「経路発見」に関するものです。あなたはどのデータを持っているのか、どのデータを持っているのか、どの変換ステップを取ることができるのか、AからBに至る最も簡単な方法は何ですか? – Phrogz
"良い"の基準は何ですか?短い? – Phrogz
私は「より速く」何かが必要です。 – makisfan
真剣に?どのくらい速くする必要がありますか? – Phrogz