26

このハッシュの配列があるとします。

[
{"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"}
]

「product」=>「bcx」であるハッシュの「 href 」値を解析するにはどうすればよいですか

Rubyでこれを行う簡単な方法はありますか?

4

1 に答える 1

53
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、例外が発生するため、最初にそれを確認することをお勧めします。

if h = ary.find { |h| h['product'] == 'bcx' }
  p h['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"
于 2012-05-14T13:33:46.830 に答える