ruby - 什么是具有 'nil' 条件的优雅 Ruby 方法?

标签 ruby hash block

有没有更优雅的方式来编写这段代码?

    def create_a_hash_from_a_collection
      my_hash = {}

      collection_of_hashes.each do |key, value|
        my_hash[key] = {} if my_hash[key].nil?
        my_hash[key] = value
      end

      my_hash
    end

在我看来笨拙的一行是:

my_hash[key] = {} if my_hash[key].nil?

有没有简写的表达方式?

最佳答案

如果您想为初始散列中的每个键都使用一个全新的散列,您需要使用一个 block 对其进行初始化:

hash = Hash.new { |hash, key| hash[key] = {} }

hash[:foo].object_id == hash[:bar].object_id #=> false

否则,如果你这样做,它将始终是相同的默认散列

hash = Hash.new({})
hash[:foo].object_id == hash[:bar].object_id #=> true

关于ruby - 什么是具有 'nil' 条件的优雅 Ruby 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297664/

相关文章:

Ruby -- If Elsif Else 错误

perl - 将 Perl 哈希从大到小排序

ruby - 散列(在像 Ruby 这样的语言中)如何工作 "under the hood"?

map - 行主要订单索引

mysql - MySQL 查询中的许多 block 在 Ruby 中写入 NULL

ruby - 在大型数组中查找重复项的快速方法

ruby - Ruby 中条件条件下的 bool 运算符 AND 和 OR 之间没有区别

ruby-on-rails - 1 周后 8 点钟

ruby - 解释 ruby​​ 中具有相同名称和其他属性的方法和变量的行为

linux-kernel - 从内核模块访问 block 设备