首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果存在散列键/值,是否有更有效的方法返回给定的键数组的哈希值?

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

Stack Overflow用户
提问于 2017-08-09 17:03:54
回答 2查看 137关注 0票数 1

我有一个接受散列的方法,我有一个键数组(按优先级排序),我想检查散列,并返回第一个匹配键的值,这个值不是blank?。到目前为止,我有以下内容,但是由于我大量使用这个方法,我想知道是否有一种更有效的方法来处理这个问题?

代码语言:javascript
运行
复制
result = [:title, :name, :identifier, :slug].each do |key|
            if my_hash[key].present?
              return my_hash[key]
              break
            end
          end 

因此,给定以下散列:

代码语言:javascript
运行
复制
{
  id: 10,
  title: "",
  name: "Foo",
  slug: "foo"
}

我希望result是:"Foo“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-09 17:10:54

从效率的角度来看,你的方式可能是最好的。但是,如果您希望它更优雅,保持效率,那么:

代码语言:javascript
运行
复制
my_hash[%i[title name identifier slug].find{|key| my_hash[key].present?}]
票数 5
EN

Stack Overflow用户

发布于 2017-08-09 17:21:58

您可以执行以下操作:

代码语言:javascript
运行
复制
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在评论中指出的,这不是最有效的方法,但可能更“可读性”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45596702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档