【Ruby】配列内のハッシュから要素を検索する方法をまとめてみた

Rubyでハッシュが格納された配列から、ハッシュを検索して取得する方法を紹介します。

Hash内の文字列で検索

nameが「佐藤」のデータを取得する場合

members = [
  {:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]},
  {:name=>"田中", :age=>24, :like=>["boxing"]},
  {:name=>"加藤", :age=>19, :like=>["baseball"]}
]

members.find{|hash| hash[:name] == "佐藤" }
=> {:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]}

Hash内の数値で検索

ageが20以上のデータを全て取得する場合。

members = [
  {:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]},
  {:name=>"田中", :age=>24, :like=>["boxing"]},
  {:name=>"加藤", :age=>19, :like=>["baseball"]}
]

members.select{|hash| hash[:age] >= 20 }
=> [{:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]}, {:name=>"田中", :age=>24, :like=>["boxing"]}]

条件に一致するデータを全て取得する時はfindじゃなくてselectを使います。

Hash内の配列で検索

likeにbaseballがある全てのデータを取得する場合。

members = [
  {:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]},
  {:name=>"田中", :age=>24, :like=>["boxing"]},
  {:name=>"加藤", :age=>19, :like=>["baseball"]}
]

members.select{|hash| hash[:like].include?("baseball") }
=> [{:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]}, {:name=>"加藤", :age=>19, :like=>["baseball"]}]

検索条件を組み合わせる

nameに「”藤”」を含んで、且つageが20未満のデータを一つ取得する場合。

members = [
  {:name=>"佐藤", :age=>20, :like=>["baseball", "tennis"]},
  {:name=>"田中", :age=>24, :like=>["boxing"]},
  {:name=>"加藤", :age=>19, :like=>["baseball"]}
]

members.select{|hash| hash[:name].include("藤") && hash[:age] < 20 }
=> {:name=>"加藤", :age=>19, :like=>["baseball"]}
タイトルとURLをコピーしました