「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」、
という使い分けが最も最適のようにです。