ruby - 在任意位置设置哈希值

标签 ruby

我正在开发一个应用程序,我想在其中修改现有散列的一部分,如下所示:

{a: {b: {c: 23}}}

成为:

{a: {b: {c: [23]}}}

但是,要设置的确切键是动态的,并且在哈希中的深度未知。有没有办法在给定键数组的情况下在散列中设置值?我希望是这样的:

my_hash['a','b','c'] = new_value

通过递归从任意深度获取值很简单,但是由于遍历是对数据的副本而不是引用进行的,所以我不知道在遍历期间不重建整个数组的情况下设置值的方法。

最佳答案

除了语法 (my_hash['a','b','c']),下面会做你想做的

h = {a: {b: {c: { e: 23}}, d: 34}}
keys = ['a','b','c']

def replace_nested_value_by(h, keys, value)
  if keys.size > 1
    replace_nested_value_by(h[keys.first.to_sym], keys[1..-1], value)
  elsif keys.size == 1
    h[keys.first.to_sym] = value
  end
end

puts h
replace_nested_value_by(h, keys, 42)
puts h

关于ruby - 在任意位置设置哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15744195/

相关文章:

ruby-on-rails - 为什么我在 Middleware/Rack 中收到 Rails 4.0.2 Hash#diff Deprecation 警告?

ruby-on-rails - 在开发模式下绕过身份验证和/或授权的好方法是什么?

ruby - yield 递归

ruby - 使用 aws-sdk 从 s3 下载文件。编码不对

ruby-on-rails - 使用 'haml_tag' 测试助手

Ruby:从数组的多重赋值中丢弃变量

ruby-on-rails - Ruby 可读的用户代理?

ruby - OpenSSL::SSL::SSLError:Ruby 2.2.1 上的 SSL_connect 错误

ruby - 使用 soap4r 访问 SOAP 服务无法访问返回对象的内容

ruby - Soundcloud Oauth 实现 : Why the hash parameters?