カテゴリ: Ruby 更新日: 2025/12/30

Ruby配列の集計処理をやさしく解説!sum・inject・group_by・tally完全入門

集計処理:sum・inject/reduce・group_by・tally の便利ワザ
集計処理:sum・inject/reduce・group_by・tally の便利ワザ

先生と生徒の会話形式で理解しよう

生徒

「Rubyの配列で、合計を出したり、同じ種類ごとに数えたりできますか?」

先生

「できますよ。Rubyの配列には、集計処理を簡単に書ける便利な方法が用意されています。」

生徒

「集計処理って、そもそも何ですか?」

先生

「合計を出す、数を数える、仲間ごとに分ける、といった作業のことです。では順番に見ていきましょう。」

1. 集計処理とは何か?

1. 集計処理とは何か?
1. 集計処理とは何か?

Rubyの配列における集計処理とは、たくさん並んだデータをまとめて整理することです。 例えば、買い物のレシートを見て合計金額を計算したり、クラスの出席人数を数えたりする作業を思い浮かべてください。 プログラムでも同じように、数値の合計、回数のカウント、グループ分けを行う場面がよくあります。 RubyではArrayクラスに、初心者でも扱いやすい集計用メソッドが用意されているため、難しい計算式を書かなくても大丈夫です。

2. sumで合計を出す基本操作

2. sumで合計を出す基本操作
2. sumで合計を出す基本操作

sumは、配列の中身をすべて足し算してくれるメソッドです。 電卓で数字を一つずつ足していく代わりに、Rubyが自動で計算してくれるイメージです。 数字だけが入った配列であれば、そのまま使うだけで合計値が得られます。


numbers = [10, 20, 30]
total = numbers.sum
puts total

60

このように、sumは「全部足す」という目的に特化しているため、とても読みやすく初心者向けです。 配列 集計 Ruby というキーワードで検索したときにも、必ず登場する基本中の基本です。

3. inject / reduceで自由な集計をする

3. inject / reduceで自由な集計をする
3. inject / reduceで自由な集計をする

injectreduceは、配列の要素を左から順番に処理して、一つの結果にまとめる方法です。 名前は少し難しく感じますが、「前の結果を次に引き継ぐ箱」と考えると理解しやすくなります。 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で仲間ごとに分ける

4. group_byで仲間ごとに分ける
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で数を数える最短ルート

5. tallyで数を数える最短ルート
5. tallyで数を数える最短ルート

tallyは、配列の中で同じ要素が何回出てきたかを数えてくれるメソッドです。 出席確認やアンケート集計のような場面を想像すると分かりやすいでしょう。 自分でカウンターを作らなくても、一発で結果が出ます。


colors = ["red", "blue", "red", "green", "blue"]
counts = colors.tally
p counts

{"red"=>2, "blue"=>2, "green"=>1}

tallyはRuby配列 集計 処理の中でも特に便利な存在です。 初心者の方でも直感的に使えるため、まず覚えておきたいメソッドの一つです。

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
Ruby学習ロードマップ完全ガイド!基礎からOOP・テスト・Web開発・運用まで効率的に進める方法
New2
Ruby
RubyでWeb/API開発を始めるには?RailsとSinatraの選び方と学習ロードマップ
New3
Rails
Railsのリアルタイム通信を完全理解!初心者でもわかる認証付きWebSocketとAction Cableの安全設計
New4
Rails
Railsの設定ファイルをやさしく解説!application.rb・credentials・environmentsの違いと役割
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.4
Java&Spring記事人気No4
Rails
Rails認可をやさしく理解!CanCanCan入門:ability.rbの定義とload_and_authorize_resource実例
No.5
Java&Spring記事人気No5
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.6
Java&Spring記事人気No6
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.7
Java&Spring記事人気No7
Ruby
Rubyのsortとsort_byの違いを徹底比較!性能や安定ソートのコツを初心者向けに解説
No.8
Java&Spring記事人気No8
Rails
Railsのqueue_adapter完全比較ガイド|inline・resque・sidekiq・good_jobの選び方を初心者向けに解説