Ruby dig set - 使用 Hash#dig 分配值

标签 ruby

基本上我想使用 #dig 分配一个数组。

我必须是这样的:

hash = {
   :first => {
      :second => [1,2,3,4]
  }
}

我会使用Hash#dig

hash.dig(:first, :second) = [1,2,3,4]

如何分配这个值?

最佳答案

您可以创建一个表现如您所愿的散列。 Hash.new获取一个 block ,每当键查找失败时调用该 block 。当发生这种情况时,我们可以创建一个空哈希:

hash = Hash.new { |hash, key| hash[key] = Hash.new(&hash.default_proc) }

hash[:first][:second] = [1, 2, 3, 4]

hash # => {:first=>{:second=>[1, 2, 3, 4]}}

请注意,仅仅访问一个不存在的 key 将导致创建一个新的散列:

hash.dig(:a, :b, :c) # => {}

hash # => {:first=>{:second=>[1, 2, 3, 4]}, :a=>{:b=>{:c=>{}}}}

hash[:foo].nil? # => false

关于Ruby dig set - 使用 Hash#dig 分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56634950/

相关文章:

ruby-on-rails - link_to 中的 Rails params.merge

ruby - 使用 Nokogiri 和 Rails 按宽度或高度尺寸解析页面 img

ruby-on-rails - 如何避免运行 ActiveRecord 回调?

为 Ruby FFI 接口(interface)从字符串转换为 const char* 时的 C++ 字符编码

ruby-on-rails - 如何获取 bundle 以使用/查看 RVM 使用的 Ruby 版本?

ruby - 如何将一行文本写入文件中间?

ruby - Ruby 3.0 中的 Define_method 问题

Ruby:如何在 Windows 中获取屏幕分辨率

ruby-on-rails - 解释 Ruby 中的哈希

ruby-on-rails - ajax 检查电子邮件是否已经存在 Ruby on Rails