情報システム部の山田です。こんにちは。
先日当社の高野さんがこんな記事を書いてくれたので乗っかってみよう!というわけで一覧表に、Rubyだとこれだよっ!を追加してみました。
Rubyだとこのメソッド
LINQ | Lodash | Ruby | |
---|---|---|---|
射影 | Select | map | map, collect |
フィルター | Where | filter | select, find_all |
昇順ソート | OrderBy | orderBy | sort, sort_by |
降順ソート | OrderByDescending | orderBy | sort, sort_by |
グループ化 | GroupBy | groupBy | group_by |
存在確認 | Any | some | any? |
最初の要素取得 | First | find | first |
最後の要素取得 | Last | findLast | last |
一意の要素取得 | Distinct | uniq | uniq |
和集合 | Union | union | Set#union, Set#+ |
差集合 | Except | difference | Set#difference, Set#- |
積集合 | Intersect | intersection | Set#intersection, Set#& |
平坦化 | SelectMany | flatten | flatten |
スキップ | Skip | drop | delete, delete_at |
指定数要素取得 | Take | take | take |
合計計算 | Sum | sum | inject(&:+), reduce(&:+), sum*1 |
最大値取得 | Max | max | max |
最小値取得 | Min | min | min |
集合関連のメソッドについて
集合に関してはArrayクラスではなくSetクラスのメソッドになります。
Setもうまく使うとかなり便利なので、この機に見直しておくのもおすすめです。
library set (Ruby 2.3.0)
合計計算について
合計計算のsumメソッドはRuby本体にはないのですが、RailsというかActiveSupportにはsumがあります。
Rails全部じゃなく、ActiveSupportだけ導入するのもアリだと思いますし、逆にRailsからRuby始めましたという人にとっては、当たり前にあるメソッドが実はActiveSupportのものだったという点を把握しておくと、後々役立つのではないかと思います。
ほかにも便利なメソッドが追加されるので、こちらも一度見ておくと色々捗りますよ。
Active Support コア拡張機能 | Rails ガイド
Symbol$to_procの話
で、「合計計算」がなんだかよくわからない感じになっているのですが、sumを使わない(使えない)場合はinject(もしくは別名のreduce)というたたみこみを行うメソッドを使います。
実はActiveSupportのsumメソッドの実装もそうなってるのですけど。
injectメソッドを普通に書き下すと
[1, 2, 3, 4, 5].inject {|result, item| result += item }
みたいな感じになるのですが、ブロック内で単純なメソッドを適用するような場合に使われるinstance method Symbol#to_proc (Ruby 2.3.0)というものがあります。
それを使うと
[1, 2, 3, 4, 5].inject(&:+)
と、かなり短くかけちゃうので、結構使われてます。
injectに限らず、例えば微妙な例ですが、数値をすべて文字列にしたい場合も
[1, 2, 3, 4, 5].map { |item| item.to_s }
ではなく
[1, 2, 3, 4, 5].map(&:.to_s)
となります。
上のSymbol#to_procじゃない書き方すると、レビューで指摘されること間違いなしでしょう。
では。
*1:ActiveSupport使用時