Enumerable.select を知らなかった話


こんなソースを何回か書きまして、絶対にもっと簡単な方法があるよなー
と、思ってたらありました

悪い例

def func(array)
  result = []
  array.each do |val|
    # 何かしらの条件を満たした場合のみ、valを加工して、resultに格納
    if … 
      result << 〜
    end
  end
  result
end

良い例

def func(array)
  array.select do |val|
    … 
  end.map do |val| 
    〜 
  end
end
select {|item| ... }
    各要素に対してブロックを評価した値が真であった要素を全て含む配列を返します。
    真になる要素がひとつもなかった場合は空の配列を返します。


だいぶすっきりした
そんな感じ