Ruby on Rails

【Rails】findメソッドで連想配列から指定した値を検索する

目次

  1. findメソッドとは
  2. 基本的な使い方
  3. selectとの違い
  4. 連想配列に対して使う
  5. まとめ

findメソッドとは

要素をブロックで評価し
結果が真になった最初の値を返します。

厳密にはRubyのメソッドで
同等のメソッドに、detectというメソッドもあります。

Railsで一般的にfindというと
ActiveRecordのメソッドをイメージしますね!

なので、差別化するために
あえてdetectを使う場合もあるようです。

基本的な使い方

配列に対して使います。

例えば
ある配列に対して最初の偶数の値を取得したい時

こんな感じ

# 適当な配列
$ array = [1, 2, 3, 4, 5]

# 最初の偶数の値を取得する
$ array.find {|i| i.even?}
=> 2

取れましたね!
最初に評価が真になった値が返って来ています。

selectとの違い

配列を評価するメソッドにselectというメソッドもあるので
selectとfindの違いについても軽く触れておきます。

selectメソッドについても、こちらで詳しく紹介しています。

findでは
配列をブロックで評価し、真になった最初の値を返します。
値が存在しない場合には、nilを返します。

selectでは
配列をブロックで評価し、真になった全ての値を返します。
値が存在しない場合には、[ ]空配列を返します。

$ array = [1, 2, 3, 4, 5]

# findでは、最初の偶数の値を取得する
$ array.find {|i| i.even?}
=> 2

# 値が存在しない場合は、nilを返す
$ array.find {|i| i == 0}
=> nil

---

# selectでは、全ての偶数の値を取得する
$ array.select {|i| i.even?}
=> [2, 4]

# 値が存在しない場合は、[]を返す
$ array.select {|i| i == 0}
=> []

次は少しトリッキーな使い方をしてみます。

連想配列に対して使う

連想配列に対して、特定の値が含まれているかどうかを
判定したい場合を想定します。

# こんな配列があった時
$ array = [ {id: 1, name: 'Pikachu'}, {id: 2, name: 'Mimikyu'}, {id: 3, name: 'Yamper'} ]

# id == 2のhashを取得する
$ array.find {|a| a[:id] == 2}
=> {:id=>2, :name=>"Mimikyu"}

取れましたね!

連想配列に対してfindを使う場合には
評価するブロックにhashが渡ってくるので
hash[:key]という具合に評価すれば良さそうです。

# hashの値が複数わかっている場合には、条件を繋げることもできる
$ array.find {|a| a[:id] == 2 && a[:name] == 'Mimikyu'}
=> {:id=>2, :name=>"Mimikyu"}

まとめ

今回は、Rubyのfindメソッドについて紹介しました。

findは、detectと同等のメソッド
要素をブロックで評価して、評価が真になった最初の値を返します。

selectとの違いは、評価が真になった
最初の値を返す、
全ての値を返す、かです!

また、findで連想配列(hash)に対して
指定した値を検索する方法についても紹介しました。

ピックアップ記事

  1. 【Blender】zip版のBlenderをBlender Launcherに移…
  2. 【Blender】MMDファイルをBlenderにImportするアドオン
  3. 【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入
  4. 【CSS】おしゃれなラジオボタンを作る
  5. git add -p でファイルの一部をコミットする【Git】

関連記事

 
  1. Ruby on Rails

    【Rails】migrationでカラムを追加・削除したい

    migrationファイルでよく使う記述。テーブルにカラムを追加・削…

  2. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

    【Rails】オブジェクトの中身をログに出力する

    オブジェクトの中身をデバッグしたりする時に便利出力結果をみやすい形に…

  3. Ruby on Rails

    【Rails】レコードが保存済みか確認するpersisted?メソッド

    レコードが保存されているかどうかでUIの表示を切り替えたり、保存されて…

  4. Ruby on Rails

    【Rails】modelを作成する

    結論rails generateコマンドを使いましょ…

  5. Ruby on Rails

    【Rails】文字列からHTMLタグを取り除く方法

    Railsで、HTMLタグを取り除いて文字列を出力したい時があります。…

  6. Ruby on Rails

    【Rails】railsでIndex name ‘xxx’ on table…

    railsで、dbを変更するためにmigrationを実行した際、in…

カレンダー

2024年4月
1234567
891011121314
15161718192021
22232425262728
2930  

最近の記事

  1. Blender

    【Blender】zip版のBlenderをBlender Launcherに移…
  2. Blender

    【UE4】用語備忘録メモ
  3. Ruby on Rails

    【Rails】railsでIndex name ‘xxx’…
  4. HTML&CSS

    【CSS】おしゃれなラジオボタンを作る
  5. WordPress

    【WPテーマ自作】UnderScoresの導入
PAGE TOP