Enumerable.select { ... }.first って、Enumerable.find(または detect)で書けるらしい
3回調べたらブログに書きましょうシリーズ。過去に同僚から教えていただいたのに、えっとどうだったっけ?とおんなじことを 2回も調べたので、メモします。
内容は下記のまんまです。
- module Enumerable
- http://docs.ruby-lang.org/ja/2.1.0/class/Enumerable.html#I_DETECT
前提
下記のような配列があったとして、
prefectures = [ { code: 1, name: "北海道" }, { code: 2, name: "青森県" }, { code: 3, name: "岩手県" }, # ... { code: 45, name: "宮崎県" }, { code: 46, name: "鹿児島県" }, { code: 47, name: "沖縄県" }, ]
Before
Enumerable.find
を知る前は下記のように書いていました
class Prefecture def self.find_by_code(code) prefectures.select { |prefecture| prefecture['code'] == code }.first end end
After
Enumerable.find
を使うと、こう。
class Prefecture def self.find_by_code(code) prefectures.find { |prefecture| prefecture['code'] == code } end end
おんなじことやるメソッドで Enumerable.detect
というのもあります。Enumerable きちんと使えるようになると、ほんと便利すねー。ではでは。