ruby - int 的字符串和 int 数组的范围(寻求改进)

标签 ruby

首先,我有:

s = "1,3..5,8"

我想要的:

["1", "3", "4", "5", "8"]

我找到了如下方法

r = s.split(/\s?,\s?/)
=> ["10", "12..15", "17", "
r.map do |c|
  if Fixnum === eval(c)
    c
  else
    eval(c).map(&:to_s).flatten
  end
end
=> ["10", "12", "13", "14", "15", "17", "18"]

是否有更好的方法来实现这一目标?

最佳答案

我不会使用 eval

稍微好一点的方法是:

s = "1,3...5,8"
p s.split(',').map { |n|
  if n.scan('...').empty?
    n
  else
    Range.new(*n.split('...', 2)).to_a
  end
}.flatten
# => ["1", "3", "4", "5", "8"]

编辑: 修复了 @fl00r 建议的代码以处理多位数字。

关于ruby - int 的字符串和 int 数组的范围(寻求改进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10102194/

相关文章:

ruby-on-rails - Ruby/Rails - 反向迁移 - DDL 到 Ruby 代码

ruby - LoadError - 不兼容的库版本 -/Users/user/gems/gems/ffi-1.13.1/lib/ffi_c.bundle

ruby-on-rails - Rspec 测试搜索方法

ruby - Capistrano 示例错误 - undefined symbol 'map' 为 :hosts symbol

ruby-on-rails - Rails Country_select 无法保存到数据库

ruby - 强制 Psych 读取 YAML 映射作为给定类的对象

ruby - 如何在 Windows 上的 Ruby 中只向 STDOUT 写入一个 0x0A 字符?

ruby-on-rails - Rails - 电子邮件确认链接给出 'Unknown Action' 错误

ruby - 通过 rake 任务将 CSV 文件上传到 Rails 4 DB

ruby - Capistrano - 无法部署我的 database.yml