LoginSignup
22
12

More than 3 years have passed since last update.

【Ruby】配列の中のハッシュの中から、キーワード検索する

Last updated at Posted at 2019-04-30

 配列の中のハッシュから値を取得する方法

こんな感じの配列から値を取得したい時ありますよね

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=>"小"}]

正規表現で検索する方法もあります。

22
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
12