将所有数字字符串递归转换为 Ruby 哈希中的整数

2024-02-11

我有一个随机大小的哈希值,其值可能如下"100",我想将其转换为整数。我知道我可以使用value.to_i if value.to_i.to_s == value,但考虑到值可以是字符串、数组(散列或字符串)或另一个散列,我不确定如何在散列中递归地执行此操作。


这是一个非常简单的递归实现(尽管必须处理数组和哈希增加了一些技巧)。

def fixnumify obj
  if obj.respond_to? :to_i
    # If we can cast it to a Fixnum, do it.
    obj.to_i

  elsif obj.is_a? Array
    # If it's an Array, use Enumerable#map to recursively call this method
    # on each item.
    obj.map {|item| fixnumify item }

  elsif obj.is_a? Hash
    # If it's a Hash, recursively call this method on each value.
    obj.merge( obj ) {|k, val| fixnumify val }

  else
    # If for some reason we run into something else, just return
    # it unmodified; alternatively you could throw an exception.
    obj

  end
end

而且,嘿,它甚至有效:

hsh = { :a => '1',
        :b => '2',
        :c => { :d => '3',
                :e => [ 4, '5', { :f => '6' } ]
              },
        :g => 7,
        :h => [],
        :i => {}
      }

fixnumify hsh
# => {:a=>1, :b=>2, :c=>{:d=>3, :e=>[4, 5, {:f=>6}]}, :g=>7, :h=>[], :i=>{}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将所有数字字符串递归转换为 Ruby 哈希中的整数 的相关文章

  • ruby中如何获取屏幕分辨率

    如何在ruby脚本中获取屏幕分辨率 高度 宽度 在 Linux 上 x y xrandr scan current d x d flatten 在 Windows 上 使用WIN32OLE等 http www ruby forum com
  • RVM + Ruby 1.9.2 + Rmagick + Lion = 系统工作,RVM 不工作

    我已通过 RVM 在全新安装的 OS X Lion 上安装了 Ruby 1 9 2 我已经通过 homebrew 安装了 Ghostscript 和 imagemagick 当使用 RVM 运行 gem install rmagick 时
  • 替换文件中两个标记之间的内容

    使用 ruby 不是 Rails 我试图弄清楚如何用字符串替换 而不是追加 静态文件中的某个块 例如 在 static file html 中 我想替换 html 注释 start 和 end 之间的所有内容 p lorem ipsum b
  • 有没有办法在Python中使用非openssl md5作为hashlib?

    我生成 md5 内容哈希值用于上传验证 但最近我注意到 对于在启用 FIPS 的计算机上运行的任何用户来说 这都会失败 FIPS 禁用 openssl md5 导致ValueError当我尝试初始化 hashlib 时 通常我会使用 SHA
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • 捆绑包 - 从另一台电脑复制粘贴宝石

    我正在尝试设置 Rails 应用程序 该应用程序依赖于大量的宝石 宝石已预先安装在vendor gems我从朋友那里获得的副本的文件夹 现在 考虑到那些闭源宝石的不可用性 bundle install path home umang pro
  • 按顺序重载每个方法

    我有一个 erb 模板 它为 httpd conf 生成配置文件 重要的是 最后写入特定位置 它是包罗万象的 目前代码看起来像 cluster apps each do app Render config end 我想重载应用程序对象上的每
  • 使用 Ruby CSV 标头转换器

    假设我有以下课程 class Buyer lt ActiveRecord Base attr accesible first name last name 以及 CSV 文件中的以下内容 First Name Last Name John
  • Rails 4 - 将地址保存为数据库中的一列

    我是 Rails 新手 正在开发一个简单的应用程序 我的 ERD 中有一个名为 Client 的模型 并且希望保存每个客户的地址 我最初的想法是将地址保存为单独的字段 即 rails g model Client address first
  • Ruby 守护进程,用于使临时 Ruby 实例的对象保持活动状态

    Ruby 是否提供了一种在不同运行的 Ruby 进程之间共享变量 更重要的是 类对象和我认为对此有用的任何其他数据抽象 的机制 例如 如果我有一个类被实例化 初始化并仔细调整到某种状态 我希望该状态对我全天所有其他独立的 Ruby 和 Ir
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati
  • 使用mongoid动态创建索引

    我有一项为我的文档创建新字段的工作 我想在这项工作结束时创建该字段的索引 我试过 Model index field gt 1 and also Mongoid Sessions default rating prediction ensu
  • Heroku:无法通过 Bundler 安装 gem

    我尝试使用以下命令将我的 Rails 应用程序推送到 Herokugit push heroku master f命令 我得到这个 Total 0 delta 0 reused 0 delta 0 remote Compressing so
  • 向 Rails 应用程序中的内置类添加方法

    我想向 Rails 应用程序中的 Array 类添加一个方法 我应该把这个方法放在哪里 编辑得更清楚 显然我把它放在某个文件中 但是我如何告诉 Rails 应用程序在哪里可以找到它 执行此操作的一种方法是在以下位置创建一个文件lib rai
  • 尝试使用 Rails 和 PostgreSQL 生成模型时,命令挂起且没有错误

    使用该命令时 rails generate model Event name string 什么也没发生 我必须按 CTRL c 我使用的版本是 红宝石 2 1 1p76 导轨4 1 0 PostgreSQL 9 3 4 Mac OS X
  • 尝试使用适用于 Windows XP 的 Heroku 时未找到 msvcrt-ruby18.dll

    我有一个学生在 Windows XP 上进行开发 他在尝试运行时遇到了一个奇怪的错误heroku keys add 错误是 This application has failed to start because msvcrt ruby18
  • 如何用水豚填充日期时间本地字段?

    我正在使用 Cocoon 添加记录 ID 看起来像workshop instance sessions attributes 1477654140 start time 目前 我正在遍历 DOM 并获取动态生成的 ID 这很好用 这样我就可
  • 什么是“太聪明”的 Ruby 代码示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一些程序员朋友进行讨论 他们说他们看到 Ruby 程序员 尤其是 编写了很多 太聪明 的代码 所以我想知道那会是什么样子 我指
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • 为什么这个 Ruby 方法返回“空值表达式”错误?

    我有这个简单的方法 def is palindrome sentence raise ArgumentError new expected string unless sentence is a String safe sentence s

随机推荐