Rubyのrejectとreject!メソッド:条件に合わない要素を選択する
Rubyの配列操作において、特定の条件に基づいて要素を除外したい場合はあると思います。
rejectとreject!メソッドはこの目的に特化しており、配列から条件に合わない要素を選択する際に利用されます。
この記事では、これらのメソッドの使い方、違い、そして実践的な使用例を詳しく解説します。
rejectメソッドの基本
rejectメソッドは、ブロックで与えられた条件に一致しないすべての要素を集めた新しい配列を返します。
重要な点は、元の配列は変更されないことです。
基本的な使用方法
特定の条件に合わない要素を配列から除外します。
ソースコード例: rejectメソッドの基本的な使用
1 2 3 |
array = [1, 2, 3, 4, 5, 6] rejected_elements = array.reject { |num| num.even? } puts rejected_elements |
この例では、偶数を除外した新しい配列が作成されます。
出力結果
1
3
5
KindleUnlimited会員であれば、全ての本をご覧頂けます。 配列、イテレータ、ブロックを理解すれば、Rubyプログラミングの世界が変わる 第1版
reject!メソッドの基本
reject!メソッドは、rejectメソッドと同じ条件で要素を除外しますが、大きな違いは元の配列自体を変更することです。
このメソッドを使うと、配列から直接条件に合わない要素が除去されます。
破壊的な方法で要素を除外する
元の配列から直接条件に合わない要素を除外します。
ソースコード例: reject!メソッドの使用
1 2 3 |
array = [1, 2, 3, 4, 5, 6] array.reject! { |num| num.even? } puts array |
この例では、元の配列から偶数が除去されます。
出力結果
1
3
5
rejectとreject!の違い
rejectとreject!の主な違いは、元の配列を変更するかどうかです。rejectは元の配列を変更せず、新しい配列を返します。一方でreject!は元の配列を直接変更します。
同じ条件でrejectとreject!を使った場合
同じ条件でrejectとreject!を使用した場合の違いを確認します。
ソースコード例: rejectとreject!の違い
1 2 3 4 5 6 |
array = [1, 2, 3, 4, 5, 6] rejected_array = array.reject { |num| num.odd? } array.reject! { |num| num.odd? } puts "Rejected array: #{rejected_array}" puts "Original array after reject!: #{array}" |
この例では、rejectで作成された新しい配列と、reject!によって変更された元の配列を比較します。
出力結果
Rejected array: 2 4 6
Original array after reject!: 2 4 6
応用例
rejectとreject!メソッドは、単純な数値や文字列の配列だけでなく、より複雑なオブジェクトの配列にも応用できます。
オブジェクトの配列での使用
オブジェクトを含む配列でのreject/reject!メソッドの使用例を見てみましょう。
ソースコード例: オブジェクトの配列でのreject/reject!メソッドの使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Product attr_reader :name, :price def initialize(name, price) @name = name @price = price end end products = [ Product.new("Apple", 120), Product.new("Banana", 80), Product.new("Cherry", 200) ] expensive_products = products.reject { |product| product.price < 150 } puts expensive_products.map(&:name) |
この例では、価格が150以上の商品のみを選択します。
出力結果
Cherry
実践的な使用例
複数の条件を組み合わせたrejectの使用
複数の条件を組み合わせて、より複雑なロジックで要素を除外する例を見てみましょう。
ソースコード例: 複数の条件を組み合わせたrejectの使用
1 2 3 |
array = [-1, 2, 3, -4, 5, -6] positive_odd_numbers = array.reject { |num| num.negative? || num.even? } puts positive_odd_numbers |
この例では、負の数と偶数を除外して、正の奇数のみを選択します。
出力結果
3
5
reject!の注意点
reject!メソッドを使用する際には、元の配列が変更されることに注意が必要です。元の配列を保持したい場合はrejectメソッドを使用するか、dupメソッドで配列を複製することを検討してください。
元の配列を保持しつつreject!を使用する
reject!を使用しても元の配列を保持する方法を見てみましょう。
ソースコード例: 元の配列を保持しつつreject!を使用する
1 2 3 4 5 6 |
original_array = [1, 2, 3, 4, 5, 6] duplicate_array = original_array.dup duplicate_array.reject! { |num| num.even? } puts "Original array: #{original_array}" puts "Duplicate array after reject!: #{duplicate_array}" |
この例では、dupメソッドで配列を複製し、複製した配列でreject!を使用します。
出力結果
Original array: 1 2 3 4 5 6
Duplicate array after reject!: 1 3 5
まとめ
Rubyのrejectとreject!メソッドは、配列から特定の条件に合わない要素を効率的に除外するためのメソッドです。
これらのメソッドを適切に使用することで、Rubyプログラミングにおける配列操作の幅が広がります。
元の配列を変更するかどうかを理解し、状況に応じて適切なメソッドを選択することが重要です。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!