Ruby 如果散列有键,则使用它。否则,请使用不同的键
Ruby 如果散列有键,则使用它。否则,请使用不同的键,ruby,dictionary,Ruby,Dictionary,response是一个看起来像两件事之一的散列: response = {'demo' => 'nil', 'test_01' => 'Demo Data'} 或 我想这样做: if response.has_key? 'test_01' new_response.update(:nps_score => response['test_01'] else new_response.update(:nps_score => response['test
response
是一个看起来像两件事之一的散列:
response = {'demo' => 'nil', 'test_01' => 'Demo Data'}
或
我想这样做:
if response.has_key? 'test_01'
new_response.update(:nps_score => response['test_01']
else
new_response.update(:nps_score => response['test']
end
有没有更“红宝石”的方法?也许是使用| |运算符的东西?我正在使用ruby 2.0.0和rails 4.0.0
new_response.update(:nps_score => response['test_01'] || response['test'])
除非false
或nil
是您可能期望的有效值,否则这将起作用。如果是这样的话,你可以用三元数
new_response.update(:nps_score => response.has_key?('test_01') ? response['test_01'] : response['test'])
这就是Hash方法的用途
new_response.update(nps_score: response.fetch('test_01', response['test']))
另一种方法是在构建时将行为嵌入哈希中
response = Hash.new do |h, key|
h['test'] if key == 'test_01'
end.update( 'test' => 'Demo Data', 'demo' => 'nil' )
response['test_01']
#=> 'Demo Data'
这更准确+1使用块形式避免在可能不需要时获取值。@MatheusMoreira:这是一个很好的观点。对于任何想知道权衡的人来说,块形式有更好的最佳情况时间,但稍微差一点的最坏情况时间。不过,我主要是为了可读性而这样写的。Luigi,如果我照字面理解你所说的,
response.size=>1
,response
,唯一的键是'test\u 01'
或'test'
,它的单个值不依赖于键,那么new\u response.update(:nps\u score=>response.values.first)
就是你所需要的。我误解你的问题了吗?你的意思是说,'test\u 01'=>'演示数据1
和'test\u 01'=>'演示数据2
@CarySwoveland谢谢你的帮助-你是对的,但我编辑了我的问题来说明我真正需要什么。哈希键/值可能并不总是第一对。
response = Hash.new do |h, key|
h['test'] if key == 'test_01'
end.update( 'test' => 'Demo Data', 'demo' => 'nil' )
response['test_01']
#=> 'Demo Data'