如果存在散列键/值,是否有更有效的方法返回给定数组键的哈希值?

时间:2017-08-09 17:03:55

标签: ruby-on-rails ruby

我有一个接受哈希的方法,我有一个键数组(按优先级排序),我想检查哈希值,并返回找到的第一个匹配键的值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"

1 个答案:

答案 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在评论中指出的那样,这不是最有效的方式,但可能更具有可读性"