keep_ifメソッドはブロック内の条件に一致した内容を抽出してくれるメソッドです。
似たものに一致した内容を削除するdelete_ifがあります。
使い方
> (1..100).to_a.keep_if {|a| a % 9 == 0} => [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99]
> ('a'..'z').to_a.keep_if {|a| a =~ /[aiueo]/ } => ["a", "e", "i", "o", "u"]
入り込んだ条件を書く事も可能であります。
> [ nil, 'a', 'b', 'c', 'd' ].keep_if {|a| a == nil || a == 'c' } => [nil, "c"]
このままだとゴチャゴチャしていて美しくないです。
別メソッドにするか、条件のトコをメソッド化して切り出した方が良さそうです。
使用上の注意
一致しなければ空配列を返す
該当がなければ空配列を吐き出します。
> ('1'..'100').to_a.keep_if {|a| a % 9 == 0} => []