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

関連記事

 
  1. railsをproductionモードで実行する

    Ruby on Rails

    【Rails】railsをproductionモードで実行する

    結論--environmentオプションを使用します。…

  2. Ruby on Rails

    【Rails】modelを作成する

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

  3. Ruby on Rails

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

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

  4. Ruby on Rails

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

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

  5. Ruby on Rails

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

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

  6. Ruby on Rails

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

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

カレンダー

2021年10月
 123
45678910
11121314151617
18192021222324
25262728293031

最近の記事

  1. Ruby on Rails

    【Rails】findメソッドで連想配列から指定した値を検索する
  2. 慣れれば3分!Bumpノードを使用した質感表現の方法

    Blender

    【Blender】Bumpを使用した質感表現の方法
  3. Ruby on Rails

    【Rails】development? production? 開発環境ごとに処…
  4. MySQL

    【MySQL】mysqlで新しくユーザーを追加する
  5. Blender

    【Blender】アニメーションでポーズを左右反転してコピペしたい時
PAGE TOP