如果hash有密钥,请使用它。否则,请使用不同的密钥

时间:2014-03-21 19:30:46

标签: ruby dictionary

response是一个哈希,看起来像两件事之一:

response = {'demo' => 'nil', 'test_01' => 'Demo Data'}

response = {'test' => 'Demo Data', 'demo' => 'nil'}

我想做这样的事情:

if response.has_key? 'test_01'
    new_response.update(:nps_score  => response['test_01']
else
    new_response.update(:nps_score  => response['test']
end

对此有更多的“Ruby”方法吗?也许是使用||的东西运营商?我使用的是ruby 2.0.0和rails 4.0.0。

3 个答案:

答案 0 :(得分:11)

这就是Hash #fetch方法的用途。

new_response.update(nps_score: response.fetch('test_01', response['test']))

答案 1 :(得分:2)

new_response.update(:nps_score => response['test_01'] || response['test'])

这将有效,除非falsenil是您可能期望的有效值。如果是这种情况,您可以使用三元组。

new_response.update(:nps_score => response.has_key?('test_01') ? response['test_01'] : response['test'])

答案 2 :(得分:0)

另一种方法是在构造时将哈希中的行为灌输。

response = Hash.new do |h, key|
  h['test'] if key == 'test_01'
end.update( 'test' => 'Demo Data', 'demo' => 'nil' )

response['test_01']
#=> 'Demo Data'