我试过了
STDIN.gets.chomp.split(" ")
然后将数组中的每个元素转换为Integer。
但我相信应该有更好的解决方案。
最佳答案
假设整数不能为负数:
nums = gets.scan(/\d+/).map(&:to_i)
或者对于任意输入:
nums = gets.strip.split(/\s+/).map(&:to_i)
这里的关键是使用 Array#map
为数组中的每个值调用一个 block ,为每个值创建一个新的结果数组。然后我们使用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 }
但是,您不太可能在这里看到非常小的改进。你确定你需要这个更快吗?您的数据是什么?您的分析结果表明这是您需要更快速度的关键位置?
关于ruby - 从 ruby 中的 STDIN 读取一行整数的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089479/