Ruby可以轻松搜索散列数组中的键值对

假设我有这个哈希数组:

[ {"href"=>"https://company.campfirenow.com", "name"=>"Company", "id"=>123456789, "product"=>"campfire"}, {"href"=>"https://basecamp.com/123456789/api/v1", "name"=>"Company", "id"=>123456789, "product"=>"bcx"}, {"href"=>"https://company.highrisehq.com", "name"=>"Company", "id"=>123456789, "product"=>"highrise"} ] 

如何解析散列的“ href ”值,其中“product”=>“bcx”

在Ruby中有没有简单的方法呢?

 ary = [ {"href"=>"https://company.campfirenow.com", "name"=>"Company", "id"=>123456789, "product"=>"campfire"}, {"href"=>"https://basecamp.com/123456789/api/v1", "name"=>"Company", "id"=>123456789, "product"=>"bcx"}, {"href"=>"https://company.highrisehq.com", "name"=>"Company", "id"=>123456789, "product"=>"highrise"} ] p ary.find { |h| h['product'] == 'bcx' }['href'] # => "https://basecamp.com/123456789/api/v1" 

请注意,这仅在元素存在时才有效。 否则,您将在nil上调用订阅运算符[] ,这将引发exception,因此您可能需要首先检查:

 if h = ary.find { |h| h['product'] == 'bcx' } ph['href'] else puts 'Not found!' end 

如果需要多次执行该操作,则应构建自己的数据结构以加快查找速度:

 href_by_product = Hash[ary.map { |h| h.values_at('product', 'href') }] p href_by_product['campfire'] # => "https://company.campfirenow.com" p href_by_product['bcx'] # => "https://basecamp.com/123456789/api/v1"