加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby可以深入搜索特定键的哈希/数组吗?

发布时间:2020-12-17 01:33:22 所属栏目:百科 来源:网络整理
导读:我有一些 ruby代码从Jenkins获取一个包含n个项目数组的json.我想要的项目有一个名为“lastBuiltRevision”的密钥 我知道我可以这样循环遍历数组 actions.each do |action| if action["lastBuiltRevision"] lastSuccessfulRev = action["lastBuiltRevision"][
我有一些 ruby代码从Jenkins获取一个包含n个项目数组的json.我想要的项目有一个名为“lastBuiltRevision”的密钥

我知道我可以这样循环遍历数组

actions.each do |action| 
    if action["lastBuiltRevision"]
        lastSuccessfulRev = action["lastBuiltRevision"]["SHA1"]
        break
    end
end

但这种感觉非常笨重,没有我在使用ruby时常常感受到的魔力.

我现在只修补了大约一个星期,我觉得我可能会遗漏一些东西来让这更容易/更快.

有这样的事吗?或者是我可以做的手动迭代?

我有点希望有类似的东西

lastSuccessfulRev = action.match("lastBuildRevision/SHA1")

解决方法

使用 Enumerable#find

actions = [
  {'dummy' => true },{'dummy' => true },{'lastBuiltRevision' => { "SHA1" => "123abc" }},]
actions.find { |h|
  h.has_key? 'lastBuiltRevision'
}['lastBuiltRevision']['SHA1']
# => "123abc"

UPDATE

如果没有匹配的项目,上面的代码将抛出NoMethodError.如果您不想获得异常,请使用以下代码.

rev = actions.find { |h| h.has_key? 'lastBuiltRevision' }
rev = rev['lastBuiltRevision']['SHA1'] if rev

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读