ruby - 从 ruby​​ 中的 STDIN 读取一行整数的有效方法是什么?

标签 ruby

我试过了

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/

相关文章:

ruby - to_specs':在 [] 中找不到 Chef (>= 0)(Gem::LoadError)

ruby - 如何远程检查我的 RedisCloud 数据库中的数据?

ruby-on-rails - coffeescript 在我的项目中出错,之前工作正常

ruby-on-rails - ActiveRecord oracle_enhanced 适配器无法加载 ruby​​-oci8 库

ruby - 使用 strong_parameters 序列化数组

ruby - 数组上的替换方法

ruby - cucumber 访问场景中的所有步骤

Ruby-on-Rails 重命名变量测试仍然看到以前的名称

Ruby 文件在最后一个空行之后无法读取内容\n

ruby-on-rails - 在一个月内创建的 Rails 范围