RubyEnumでreduce
Ruby基礎とEnumerable応用
Rubyはオブジェクト指向言語であり、配列やハッシュなどのコレクションに対して豊富なメソッドが用意されています。Enumerableモジュールは、コレクションを操作するための共通インターフェースを提供し、each、map、select、reject などのメソッドを利用できます。これらを組み合わせることで、データのフィルタリングや変換を簡潔に書くことが可能です。
例えば、整数の配列から偶数だけを取り出す場合は次のように書けます。
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
# evens => [2, 4, 6]
このように、Enumerable応用は日常的なデータ処理を効率化します。
畳み込みメソッド inject と reduce
配列やハッシュを一つの値にまとめる操作は「畳み込み」と呼ばれ、Rubyではinject(またはreduce)メソッドで実装できます。injectは初期値を指定し、ブロック内で前回の結果と現在の要素を組み合わせて新しい結果を返します。
sum = [1, 2, 3, 4].inject(0) { |acc, n| acc + n }
# sum => 10
初期値を省略すると、配列の最初の要素が初期値として使われます。reduceはinjectと同義で、読みやすさを重視して使い分けられます。
畳み込みは「畳み込み演算」とも呼ばれ、数値計算や文字列結合、複雑なデータ構造の生成に広く利用されます。
ソートと条件判定 all?, any?, none?
配列を並べ替える際にはsortとsort_byが便利です。sortは要素を比較して昇順に並べ替え、sort_byはブロックでキーを指定してソートします。
words = ["banana", "apple", "cherry"]
words.sort
# => ["apple", "banana", "cherry"]
words.sort_by { |w| w.length }
# => ["apple", "banana", "cherry"]
条件判定にはall?、any?、none?が用意されています。all?は全要素が真であるか、any?は少なくとも一つが真であるか、none?は全てが偽であるかを判定します。
numbers = [2, 4, 6]
numbers.all? { |n| n.even? } # => true
numbers.any? { |n| n.odd? } # => false
numbers.none? { |n| n > 10 } # => true
これらのメソッドを組み合わせることで、データの整合性チェックやフィルタリングを簡潔に実装できます。
コメント
コメントを投稿