1

私が試してみました

STDIN.gets.chomp.split(" ")

次に、配列内の各要素を整数に変換しました。

しかし、私はもっと良い解決策があるはずだと信じています。

4

1 に答える 1

4

整数を負にすることはできないと仮定します。

nums = gets.scan(/\d+/).map(&:to_i)

または任意の入力の場合:

nums = gets.strip.split(/\s+/).map(&:to_i)

ここで重要なのは、usingを使用Array#mapして配列内の各値のブロックを呼び出し、それぞれの結果の新しい配列を作成することです。次に、(Rubyのアンパサンド構文によって呼び出される)を使用して、各文字列でメソッドSymbol#to_procを簡潔に呼び出します。to_i

たとえば、foo.map(&:to_i)はと同等foo.map{ |o| o.to_i }です。

編集:配列を所定の位置にマップし、それが唯一の区切り文字であることがわかっている場合は単一のスペースでのみ分割し、Symbol#to_procを使用しない方が少し速くなります:

nums = gets.chomp.split(' ').map!{ |o| o.to_i }

ただし、ここでごくわずかな改善以上のものが見られる可能性はほとんどありません。これがもっと早く必要だと確信していますか?あなたのデータは何ですか、そしてこれがあなたがより多くのスピードを必要とする重要な場所であることを示すあなたのプロファイリング結果は何ですか?

于 2012-04-10T13:14:51.363 に答える