Red*_*Red 17 ruby hash null ruby-on-rails ruby-1.9
当ruby中的nil为零时,是否存在将事物分配给哈希的简短手或最佳实践?例如,我的问题是我正在使用另一个哈希来构建它,如果其中的某些内容是nil,它会为该键分配nil,而不是仅仅将其保留.我理解为什么会这样,所以我的解决方案是:
hash1[:key] = hash2[:key] unless hash2[:key].nil?
Run Code Online (Sandbox Code Playgroud)
因为我不能在键中实际指向nil的值中有值.(我宁愿有一个空哈希比一个有{:key => nil}的哈希,这是不可能的)
我的问题是有更好的方法吗?我不想在作业结束时执行delete_if.
Til*_*ilo 20
如果你否定"除非"陈述,会稍微缩短一点
hash1[:key] = hash2[:key] if hash2[:key] # same as if ! hash2[:key].nil?
Run Code Online (Sandbox Code Playgroud)
您也可以在迈克尔或马克 - 安德烈的其他答案中建议的&&声明中进行比较
这真的取决于你,你觉得最可读的东西.通过设计,Ruby总有多种方法来解决问题.
你也可以修改hash2:
hash1 = hash2.reject{|k,v| v.nil?}
hash2.reject!{|k,v| v.nil?} # even shorter, if in-place editing of hash2
Run Code Online (Sandbox Code Playgroud)
这将删除键/值对:key => nil from hash2(就地,如果你使用拒绝!)
我最喜欢这个,循环和条件覆盖都在一行!
h1 = {:foo => 'foo', :bar => 'bar'}
h2 = {:foo => 'oof', :bar => nil}
h1.merge!(h2) { |key, old_val, new_val| new_val.nil? ? old_val : new_val }
#=> {:foo => 'oof', :bar => 'bar'}
Run Code Online (Sandbox Code Playgroud)
这会将 h1 中的每个值替换为 h2 的值,其中键相同且 h2 值不为 nil。
| 归档时间: |
|
| 查看次数: |
17581 次 |
| 最近记录: |