Rubyで条件に合う要素を抽出する方法:select, select!

配列やハッシュなどから、ある条件を満たす要素だけを取り出したいことがあります。 このような時、Ruby では select メソッドを使います。

selectメソッドの使い方

select メソッドは、配列、ハッシュをレシーバーに、以下のような書式で扱います。
配列.select do |x|
  条件
end
または、以下のように do-end ではなく { } を使うこともできます。
配列.select { |x| 条件 }

サンプル

以下の例では、select メソッドは、配列 list の各要素に対して条件 「x > 3」を適用し、条件に当てはまる要素だけを返します。
list = [1, 2, 3, 4, 5]

list_new = list.select do |x|
  x > 3
end

p list_new
#=> [4, 5]
3より大きい数値という条件なので、[4, 5]という条件に合う要素だけの配列になります。 また、文字列の要素に対しても以下のように include? メソッドなどを使うことで条件を適用できます。
list =  ["yamamoto", "tanaka", "oyama", "yano"]

list_new = list.select { |x|
  x.include?("yama")
}

p list_new
#=>["yamamoto", "oyama"]

破壊的メソッド select! の使い方

select メソッドには、破壊的メソッドの select! メソッドも用意されています。配列、ハッシュをある条件に一致する要素だけにしたい時に使えます。
list =  ["yamamoto", "tanaka", "oyama", "yano"]

list.select! { |x|
  x.include?("yama")
}

p list
#=>["yamamoto", "oyama"]
データの入っているリストから条件を満たすものだけを取り出すことのできるselectを使うとさまざまなデータ処理が可能になります。