1

我努力了

STDIN.gets.chomp.split(" ")

然后将数组中的每个元素转换为整数。

但我相信应该有更好的解决方案。

4

1 回答 1

4

假设整数不能为负:

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

或者对于任意输入:

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

这里的关键是使用 usingArray#map为数组中的每个值调用一个块,为每个值创建一个新的结果数组。然后我们使用Symbol#to_proc(由 Ruby 的 & 语法调用)简洁地调用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 回答