Ruby配列の集計処理をやさしく解説!sum・inject・group_by・tally完全入門
生徒
「Rubyの配列で、合計を出したり、同じ種類ごとに数えたりできますか?」
先生
「できますよ。Rubyの配列には、集計処理を簡単に書ける便利な方法が用意されています。」
生徒
「集計処理って、そもそも何ですか?」
先生
「合計を出す、数を数える、仲間ごとに分ける、といった作業のことです。では順番に見ていきましょう。」
1. 集計処理とは何か?
Rubyの配列における集計処理とは、たくさん並んだデータをまとめて整理することです。 例えば、買い物のレシートを見て合計金額を計算したり、クラスの出席人数を数えたりする作業を思い浮かべてください。 プログラムでも同じように、数値の合計、回数のカウント、グループ分けを行う場面がよくあります。 RubyではArrayクラスに、初心者でも扱いやすい集計用メソッドが用意されているため、難しい計算式を書かなくても大丈夫です。
2. sumで合計を出す基本操作
sumは、配列の中身をすべて足し算してくれるメソッドです。
電卓で数字を一つずつ足していく代わりに、Rubyが自動で計算してくれるイメージです。
数字だけが入った配列であれば、そのまま使うだけで合計値が得られます。
numbers = [10, 20, 30]
total = numbers.sum
puts total
60
このように、sumは「全部足す」という目的に特化しているため、とても読みやすく初心者向けです。 配列 集計 Ruby というキーワードで検索したときにも、必ず登場する基本中の基本です。
3. inject / reduceで自由な集計をする
injectとreduceは、配列の要素を左から順番に処理して、一つの結果にまとめる方法です。
名前は少し難しく感じますが、「前の結果を次に引き継ぐ箱」と考えると理解しやすくなります。
reduceはinjectとまったく同じ意味で、英語の好みの違い程度に思って問題ありません。
numbers = [1, 2, 3, 4]
result = numbers.inject(0) do |sum, n|
sum + n
end
puts result
10
injectは合計だけでなく、掛け算や文字の結合など、自由な集計処理ができます。 少し慣れてくると、sumではできない複雑な集計にも対応できるようになります。
4. group_byで仲間ごとに分ける
group_byは、配列の中身を条件ごとに仕分けするメソッドです。
例えば、果物を色ごとに箱へ分けるようなイメージです。
結果は配列ではなく、ハッシュという「キーと値の組み合わせ」で返ってきます。
words = ["apple", "ant", "banana"]
grouped = words.group_by { |w| w[0] }
p grouped
{"a"=>["apple", "ant"], "b"=>["banana"]}
group_byは「分類」「グループ化」「仕分け」といった処理を一行で書けるのが大きな特徴です。 Ruby 配列 group_by 使い方 という検索でも、よく使われる定番テクニックです。
5. tallyで数を数える最短ルート
tallyは、配列の中で同じ要素が何回出てきたかを数えてくれるメソッドです。
出席確認やアンケート集計のような場面を想像すると分かりやすいでしょう。
自分でカウンターを作らなくても、一発で結果が出ます。
colors = ["red", "blue", "red", "green", "blue"]
counts = colors.tally
p counts
{"red"=>2, "blue"=>2, "green"=>1}
tallyはRuby配列 集計 処理の中でも特に便利な存在です。 初心者の方でも直感的に使えるため、まず覚えておきたいメソッドの一つです。