有没有一个简短的手或最佳做法分配的东西到一个哈希,当它们在红宝石没有?例如,我的问题是,我正在使用另一个哈希建立这个,如果它的内容为零,它将分配给该密钥的零,而不是单独留下.我明白为什么会发生这种情况,所以我的解决办法是:
hash1[:key] = hash2[:key] unless hash2[:key].nil?
因为我不能有一个值在哪里的关键实际上指向零. (我宁愿有一个空的哈希比{:key => nil},这不会发生)
我的问题是有更好的办法吗?我不想在作业结束时做一个delete_if.
解决方法
如果你否定“除非”的声明,稍微稍微一点
hash1[:key] = hash2[:key] if hash2[:key] # same as if ! hash2[:key].nil?
您也可以在&&& Michael或Marc-Andre在其他答案中提出的声明
这真的取决于你,你觉得对你而言最为可读.通过设计,Ruby中总是有多种方法来解决问题.
你也可以修改hash2:
hash1 = hash2.reject{|k,v| v.nil?} hash2.reject!{|k,v| v.nil?} # even shorter,if in-place editing of hash2
这将删除键/值对:key =>从哈希2(到位,如果你使用拒绝!)