我有一些 ruby代码从Jenkins获取一个包含n个项目数组的json.我想要的项目有一个名为“lastBuiltRevision”的密钥 我知道我可以这样循环遍历数组 actions.each do |action| if action["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 },
{'dummy' => true },
{'lastBuiltRevision' => { "SHA1" => "123abc" }},
{'dummy' => true },
]
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
