Rubyでデータ抽出filter
Ruby基礎とEnumerableの概要
Ruby基礎を学ぶ上で欠かせないのが、列挙中Enumerableモジュールです。Enumerableは配列やハッシュなどのコレクションに対して、共通の処理を提供します。map, collect, select, reject, filter, find, detect などのメソッドを使うことで、データの加工や抽出を簡潔に書くことができます。
mapとcollectでの加工
mapとcollectは実質同じメソッドで、配列の各要素を変換して新しい配列を返します。例えば、numbers.map { |n| n * 2 } はすべての数を2倍にします。collectはmapの別名で、可読性を高めるために使い分けられます。
selectとrejectでの抽出
selectは条件を満たす要素だけを抽出し、rejectは条件を満たさない要素を除外します。array.select { |x| x.even? } は偶数だけを取り出し、array.reject { |x| x.odd? } は奇数を除外します。抽出と除外を明確に区別することで、コードの意図が伝わりやすくなります。
filter, find, detectの使い分け
filterはselectと同義で、Ruby 2.7以降で導入された別名です。findとdetectは最初に条件を満たす要素を返し、配列全体を走査しません。array.find { |x| x > 10 } は10より大きい最初の数を返します。これらを使い分けることで、パフォーマンスと可読性を最適化できます。
実践例: データ加工と抽出のワークフロー
以下は、ユーザー情報の配列からアクティブユーザーのメールアドレスを抽出し、メールアドレスを大文字に変換する一連の処理です。
users = [
{name: 'Alice', active: true, email: 'alice@example.com'},
{name: 'Bob', active: false, email: 'bob@example.com'},
{name: 'Carol', active: true, email: 'carol@example.com'}
]
active_emails = users
.select { |u| u[:active] } # 抽出
.map { |u| u[:email].upcase } # 加工
puts active_emails
# => ["ALICE@EXAMPLE.COM", "CAROL@EXAMPLE.COM"]
この例では、selectで抽出、mapで加工を組み合わせて、シンプルに目的を達成しています。
コメント
コメントを投稿