【发布时间】:2015-07-29 20:53:15
【问题描述】:
我在我的 rails 环境中使用Hash#slice 方法。
slice 方法是这样工作的:
{ a: 1, b: 2, d: 4 }.slice(:a, :c, :d)
=> {:a=>1, :d=>4}
但是如果给定的键不存在,我想返回一个nil,像这样:
{ a: 1, b: 2, d: 4 }.slice(:a, :c, :d)
=> {:a=>1, :c=>nil, :d=>4}
这是我为函数写的,有没有更好的方法来编写这个函数?
hash = {a: 1, b: 2, d: 4}
keys = [:a, :c, :d]
keys_not_present = keys.map { |key| key unless hash.has_key?(key) }.compact
keys_not_present = keys_not_present.zip([nil]*keys_not_present.size).to_h
hash.slice(*keys).merge(keys_not_present)
不关心哈希的顺序。
【问题讨论】:
标签: ruby-on-rails ruby