2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] pluckメソッド/mapメソッドでテーブルから配列を抽出/加工する

Posted at

記事の概要

 Railsアプリでデータを取扱っていると、テーブルから特定のカラムデータだけを配列にして抽出したい、抽出した配列データを加工して新しい配列にしたい、といった場面に逢います。そうしたときに便利なpluckメソッド、mapメソッドを試してみました。
 1. pluckメソッド
 2. mapメソッド

1. pluckメソッド

 1つのモデルで使用されているテーブルについて、引数に指定したカラムの値を配列で返すメソッド。カラムの指定は一つでも複数でも可。
 今、下表のような、出品された家電製品のテーブルがあるとする(Itemモデルのitemsテーブル)。

aca9ebacc240c009b5f732c38ca602a4.png

 pluckメソッドを使ってみると、下のように配列が帰ってくる。

names = Item.pluck(:item_name) # 引数にカラムを一つ指定

# => ["掃除機", "冷蔵庫", "空気清浄機", "扇風機", "アイロン", "洗濯機", "電子レンジ", "プリンター", "ヒーター"]

nameprices = Item.pluck(:item_name,:price) # 引数にカラムを二つ指定

# => [["掃除機", 5000], ["冷蔵庫", 20000], ["空気清浄機", 10000], ["扇風機", 1000], ["アイロン", 3000], ["洗濯機", 9000], ["電子レンジ", 2000], ["プリンター", 6000], ["ヒーター", 4000]]

 pluckメソッドに引数を渡さない場合は、全てのカラムのデータが二次元配列に格納されて返ってくる。

2. mapメソッド

 配列の各要素に対して、ブロックを評価した後に新しい配列にして返してくれる。
 例として、mapメソッドを使って、上記のitemsテーブルについて全品10%割引を適用させてみる。

prices = Item.pluck(:price) 

# => [5000, 20000, 10000, 1000, 3000, 9000, 2000, 6000, 4000]

discounted_prices = prices.map{|n|n*0.9}

# => [4500.0, 18000.0, 9000.0, 900.0, 2700.0, 8100.0, 1800.0, 5400.0, 3600.0]

 新たな配列に格納されて返ってきた。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?