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の違いについても軽く触れておきます。

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. 【C97】冬コミ受かってました
  2. 【git】git checkoutする時に、ベースブランチを指定する
  3. 【C98】夏コミ申し込みました。
  4. 【C97】冬コミ申し込みました!
  5. 【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入

関連記事

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

    Ruby on Rails

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

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

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

    Ruby on Rails

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

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

  3. Ruby on Rails

    【Rails】modelを作成する

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

カレンダー

2020年7月
 12345
6789101112
13141516171819
20212223242526
2728293031  

最近の記事

  1. railsをproductionモードで実行する
  2. 【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入
  1. 同人イベント

    【C97】冬コミ申し込みました!
  2. App/Game

    その他

    【雑記】自分のやりたいこと、やってみたいことの整理
  3. git

    【git】git checkoutする時に、ベースブランチを指定する
  4. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

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

    【DQX】ドラクエ10始めました
PAGE TOP