Hisakeyのブログ

エンジニアが色々呟くブログです。

mapメソッドとpluckメソッドの違い

概要

今回も、意識することなく使っていたメソッドです。

mapとpluckの違いについてまとめてみました!

内容

何が違うのか?

map

  • mapはRubyのArrayクラスのメソッドですが、Enumerableモジュールを介して他でも利用可能。
  • 配列、ハッシュなどを繰り返し処理し、各要素に対してブロック内の処理を適用した結果を新しい配列として返します。
  • データベースのレコードに対して使用される場合、全てのレコードをメモリにロードしてから処理を行います。

pluck

  • pluckはRailsActiveRecordのメソッドで、データベースから特定のカラムの値を直接取得します。
  • データベースレベルでカラムを指定するため、必要なデータのみを効率的に取得でき、大量のデータを扱う場合にメモリ使用量を節約できます。
  • pluckはデータベースのクエリ結果から直接値を取り出すため、mapよりもパフォーマンスが良い場合がある

上記を踏まえると、下記は同じことをやっていますが、 mapは、一度レコードをメモリにロードします。 pluckは、クエリから直接、値をとりだせます

データが少なければよいですが、多くなればなるほど両者の処理速度に違いが出てきます。

users.map(&:name) # ['taro', 'jiro', 'saburo' ]

users.pluck(:name) # ['taro', 'jiro', 'saburo' ]

まとめ

とりあえず、mapを実装・テストで書いていましたが、正しく使い分けてく必要があるなと勉強できました!

最後まで、読んでいただきありがとうございました