【Ruby】findメソッド・selectメソッドの具体的な使い方

Ruby

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}

戻り値には、条件に合致した要素がハッシュにまとめられて返ってきます。

タイトルとURLをコピーしました