目次
Rubyのfindメソッドとは
Rubyのfindメソッドは、配列やハッシュから指定した条件に一致する「最初の要素」を取得することができます。
findメソッドの構文は以下のとおりです。
# 配列の場合
result = 配列.find{ |element|
#処理
}
# ハッシュの場合
result = 配列.find{ |key, value|
#処理
}
また、findメソッドの類似メソッドとしては、detectメソッドがあります。
それでは以下で、findメソッドの具体的な使い方を解説していきますね。
条件に該当する配列の最初の要素を取得する
例えば、数値が格納された配列から3で割り切れるかどうかを調べて、条件に当てはまる最初の数値を取得する場合、以下のように書けます。
numbers = [1, 2, 3, 4, 5, 6]
result = numbers.find{ |number| number % 3 == 0 }
p result # => 3
ハッシュ内で条件に該当する最初の要素を取得する
以下のようにハッシュに対してもfindメソッドは使用できます。
members = {"荻野" => 35, "藤原" => 21, "中村" => 29, "佐藤" => 23, "安田" => 22}
result = members.find{ |name, age| age > 30 }
p result # => ["荻野", 35]
条件に合致した要素(keyとvalueの組み合わせ)は、配列に変換されて取得することが分かりますね。
Rubyのselectメソッドとは
Rubyのselectメソッドは、配列やハッシュから指定した条件に一致する「全ての要素」を取得することができます。
selectメソッドの構文は以下のとおりです。
# 配列の場合
result = 配列.select{ |element|
#処理
}
# ハッシュの場合
result = 配列.select{ |key, value|
#処理
}
selectメソッドはfindメソッドとは異なり、条件に合致する全ての要素が返ってくるため、戻り値の形に注意が必要です。
配列に対してselectメソッドを使った場合、戻り値は配列となります。
しかし、ハッシュに対してselectメソッドを使うと、戻り値はハッシュとなります。
selectメソッドと挙動が似ている類似メソッドとしては、Railsのfind_allメソッドがありますね。
それでは、以下でselectメソッドの具体的な使い方について解説していきます。
配列から条件に合致する要素を全て取得する
配列から3で割り切れる数を全て取得する場合、以下のように書きます。
numbers = [1, 2, 3, 4, 5, 6]
result = numbers.select{ |n| n % 3 == 0 }
p result # => [3, 6]
resultには、戻り値である3と6が配列に格納されて返ってきます。
ハッシュから条件に合致する要素を全て取得する
以下のハッシュから、ageが28以上である要素を全て取得する場合、次のように記述します。
members = {"荻野" => 35, "藤原" => 21, "中村" => 29, "佐藤" => 23, "安田" => 22}
result = members.select{ |name, age| age >= 28 }
p result # => {"荻野"=>35, "中村"=>29}
戻り値には、条件に合致した要素がハッシュにまとめられて返ってきます。