「pluck」と「map」の違いについて
【結論】
・任意のカラムの配列を取得する方法として
「pluck」と「map」の二つのメソッドが存在する
・「map」はRubyのメソッドで、
要素の数だけブロックを実行し、戻り値を集めた配列を返す
「pluck」はRailsのメソッドで
指定任意のカラムの配列を取得する。
・DBからデータを直接取得する場合は「pluck」
インスタンスから取得する場合は「map」の方が
処理速度が早くなる傾向にある
【目次】
【本題】
特定カラムのデータだけを一括で取得する方法
テーブルの特定のカラムのデータだけを一括して
取得したい場合があります。
そういった場合に使用出来るのが、
「pluck」と「map」というメソッドです。
「map」について
「map」はRubyに組み込まれているメソッドです。
要素の数だけブロックを実行して、
ブロックの戻り値を集めた配列を返します
num = [1,2,3,4,5] num.map {|i| i * 2 } => [2, 4, 6, 8, 10]
「pluck」について
「pluck」はRailsに組み込まれているメソッドで、
Rubyだけでは使用できません。
モデル(インスタンス)から
指定したカラムのデータだけを一括で取得できます。
model.pluck(column)
どのように使い分けるべきか?
基本的に「map」はメモリ内で処理を行う際のメモリ消費がネックとなり、
「pluck」の方が処理速度は早いようですが、一つ欠点があります。
それは、「pluck」では毎回SQLが発行されるという点です。
これは、既にインスタンス化されたオブジェクトから
値を取得する時にもSQLが発行されてしまいます。
一方、「map」であれば、メモリ内で処理を行うだけで済みます。
なので、DBから値を取得する場合には「pluck」、
既にインスタンス化したオブジェクトから値を取得する場合は「map」、
という使い分けが最も最適のようにです。