## 配列の中のハッシュから値を取得する方法
こんな感じの配列から値を取得したい時ありますよね
test1.rb
team = [{number:"2", name:"小田"},
{number:"4", name:"小池"},
{number:"11", name:"佐々木"}]
下記のようにキーワード検索をする動きを作成します。
test2.rb
keyword = "2"
result = team.select { |x| x[:number].include?(keyword) || x[:name].include?(keyword) }
p result
#=> [{:number=>"2", :name=>"小田"}]
include?を使って部分一致(部分文字列として含まれる)を調べています。
戻り値は[{}]
になっていますね。
ハッシュのみで値を取得したいときは、find
を使います。
test3.rb
result = team.find { |x| x[:number].include?(keyword) || x[:name].include?(keyword) }
p result
#=> {:number=>"2", :name=>"小田"}
ただfind
では複数の値を取る事ができません。最初の値のみ戻り値として返します。
全ての値を取得したいときはfind_all
とすれば、全ての値を取得できます。
select
と同じ機能をするが find_all
です。
test4.rb
team = [{number:"2", name:"小田"},
{number:"4", name:"小池"},
{number:"11", name:"佐々木"},
{number:"2", name:"小"},
{number:"4", name:"池"},
{number:"11", name:"木"}]
result = team.find_all { |x| x[:number].include?(keyword) || x[:name].include?(keyword) }
p result
#=> [{:number=>"2", :name=>"小田"}, {:number=>"2", :name=>"小"}]
正規表現で検索する方法もあります。