目次
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)に対して
指定した値を検索する方法についても紹介しました。