更新哈希中的某些键

Sam*_*iin 4 ruby hash

我只想更新哈希中的日期元素。IE

hash = { 'name': 'Albert', 'date_1': "31-01-2017", 'date_2': "31-01-2017" }

## I only want to update `date_1` and `date_2`. 
Run Code Online (Sandbox Code Playgroud)

我试过了

hash.select {|k,v| ['date_1','date_2'].include? k }.transform_values!(&:to_date)
Run Code Online (Sandbox Code Playgroud)

但是因为我之前做了一个选择,它只会返回我

{ 'date_1': Tue, 31 Jan 2017, 'date_2': Tue, 31 Jan 2017 }

有什么建议可以保留其他属性以及转换选定的键吗?

i.e. { 'name': 'Albert', 'date_1': Tue, 31 Jan 2017, 'date_2': Tue, 31 Jan 2017 }

Ale*_*jin 5

只需更新 date_1 和 date_2 的值:

hash['date_1'] = hash['date_1'].to_date if hash['date_1']
hash['date_2'] = hash['date_2'].to_date if hash['date_2']
Run Code Online (Sandbox Code Playgroud)

或者,each如果您有更多日期键,则可以使用它:

date_keys = [:date_1, :date_2]
hash.each do |k,v| 
  hash[k] = v.to_date if date_keys.include?(k)
end
Run Code Online (Sandbox Code Playgroud)