Engineering

Jan 12, 2018

rubyのEnumerableクラスの抽出メソッドまとめ、map、find、reject、select

 

RubyのEnumerableがごっちゃになっているのと、便利なメソッドが多いので、 まとめてみます。

例に使用しているrubyのversionは2.4.1です。

 

map

 

mapはブロックの結果をまとめた配列を返してくれます。 collectというメソッドもありますが、mapはcollectのエイリアスなので挙動は同じです。

 

mapの方が短いのでmapを使いがちです。

下の例では仮想通貨の頭文字の配列の中で、'B'という文字列が 含まれるかを判断して返しています。

2.4.1 :003 >   coins = [ 'BTC', 'ETH', 'XRP', 'NEM']
 => ["BTC", "ETH", "XRP", "NEM"]
2.4.1 :004 >
2.4.1 :004 >   coins.map{ |coin| coin.include?('B')}
 => [true, false, false, false]

 

 

Hashの場合は、key と valueを分割できます。 keyを取り出したり、valueを取り出すにはこうします。

 

2.4.1 :027 >   coins_hash = { btc: 'Bitcoin', eth: 'Ethereum', xrp: 'Ripple', nem: 'XEM' }
 => {:btc=>"Bitcoin", :eth=>"Ethereum", :xrp=>"Ripple", :nem=>"XEM"}

2.4.1 :032 >   coins_hash.map{ | key, value | value }
 => ["Bitcoin", "Ethereum", "Ripple", "XEM"]
2.4.1 :032 >   coins_hash.map{ | key, value | key }
 =>[:btc, :eth, :xrp, :nem]

 

 

find ( detect )  | 最初に条件に一致したものを返却

 

 

findは配列やハッシュの個別のオブジェクトの中で最初に真になったものを返却してくれます。 detectというメソッドもありfindの別名になります。

 

 

2.4.1 :090 >   coins.find{ |c| c.include?('X') }
 => "XRP"

 

ハッシュの場合

 

2.4.1 :084 $gt; coins_hash.find{ | key , value | key.to_s.include?('x') }
 => [:xrp, "Ripple"]

 

 

select | 条件に一致したものを配列で取得

 

 

selectはブロックが真を返したものを配列で返却してくれます。 findメソッドは最初に一致したものを返却してくれますが、selectは真のものすべてを 返却してくれます。

 

 

2.4.1 :095 >   coins.select{ |c| c.include?('T') }
 => ["BTC", "ETH"]

 

ハッシュの場合

 

2.4.1 :117 > coins_hash.select{ |coin| coin.to_s.include?('t') }
 => {:btc=>"Bitcoin", :eth=>"Ethereum"}

 

 

reject | 条件に一致しないものを配列で取得

 

 

rejectはselectの反対で偽のものを抽出して配列にしてくれます。

 

2.4.1 :118 > coins.reject{ |c| c.include?('T') }
 => ["XRP", "NEM"]

 

ハッシュの場合

 

2.4.1 :121 > coins_hash.reject{ |coin| coin.to_s.include?('t') }
 => {:xrp=>"Ripple", :nem=>"XEM"}

関連記事

記事検索

気になるサイト内の記事を検索する

プロフィール

バンクーバー在住のフルスタックエンジニアです。React, Ruby on Rails, Go などでお仕事しています。職場がトロントなので日本、トロント、バンクーバーの三つの時天空を操って生活しています。

プロモーション