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】
  2. 【Rails】selectメソッドで特定の条件を満たす要素を取得する
  3. 【Blender】複数バージョンを簡単に管理できる、BlenderLaunche…
  4. 【Blender】アニメーションでポーズを左右反転してコピペしたい時
  5. 【Rails】modelを作成する

関連記事

 
  1. Ruby on Rails

    【Rails】RSpecのお作法メモ

    RSpecを書く機会が増えてきたので、記法の備忘録として記事にします…

  2. Ruby on Rails

    【Rails】development? production? 開発環境ごとに処理を切り分けたい時

    Railsで、開発環境ごとに処理を切り替えたい時の方法を紹介します。ま…

  3. Ruby on Rails

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

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

  4. Ruby on Rails

    【Rails】selectメソッドで特定の条件を満たす要素を取得する

    selectは、配列に対してブロック内の条件を評価し、真になって要素を…

  5. Ruby on Rails

    【Rails】modelを作成する

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

  6. Ruby on Rails

    【Rails】ActiveStorageで添付ファイルを削除したいときは、purgeを使う

    動作確認するために、active_storageでアップロードした画…

カレンダー

2026年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

最近の記事

  1. Blender

    【Blender】拡張機能(アドオン)の基本的な使い方
  2. Blender

    【Blender】起動時に強制終了してしまう問題
  3. Blender

    【Blender】MMDファイルをBlenderにImportするアドオン
  4. WordPress

    【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入
  5. 慣れれば3分!Bumpノードを使用した質感表現の方法

    Blender

    【Blender】Bumpを使用した質感表現の方法
PAGE TOP