我有一个接受哈希的方法,我有一个键数组(按优先级排序),我想检查哈希值,并返回找到的第一个匹配键的值blank?
。到目前为止,我有以下几点,但由于我大量使用这种方法,我想知道是否有更有效的方法来实现它?
result = [:title, :name, :identifier, :slug].each do |key|
if my_hash[key].present?
return my_hash[key]
break
end
end
所以给出以下哈希:
{
id: 10,
title: "",
name: "Foo",
slug: "foo"
}
我希望result
成为:" Foo"
答案 0 :(得分:0)
您可以执行以下操作:
whitelisted_keys = [:title, :name, :identifier, :slug]
filtered_hash = your_hash.slice(*whitelisted_keys) # will only get pair matching your whitelisted_keys
# return all `.present?` key/values pairs:
filtered_hash.select{ |k,v| v.present? }
# return an array of the first key/value pair present:
filtered_hash.find{ |k,v| v.present? } # append .last to get the value
正如Sawa在评论中指出的那样,这不是最有效的方式,但可能更具有可读性"