Rubyで配列内の重複する要素を数える方法【初心者向け】

初心者向けにRubyで配列内の重複する要素を数える方法について解説しています。ここではgroup_byメソッドによって配列から重複した要素を取り出しその要素数を数えます。サンプルコードで動作を確認しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyで配列内の重複する要素を数える方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

配列内の重複する要素を数える方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

配列内の重複する要素を数える方法

今回は配列内の要素の中でも重複する要素を取り出し、さらにその数を数える方法を紹介します。

では、どんなことをするのかということですが、

 

例えば

a = [100, 20, 100, 10, 100, 20]

という配列があったとします。

 

この配列の要素で重複するのを取り出して表示するにはどうしたら良いのでしょうか。

 

結果的にハッシュで結果を表示できるとわかりやすいので

{100=>3, 20=>2, 10=>1}

となるととてもわかりやすくて便利ですよね。

 

今回はこちらの方法を紹介させていただきます。

 

実際に書いてみよう

Rubyのgroup_byメソッドを使うととても便利です。

group_byメソッドは、要素をグループ分けします。

ブロック引数に各要素を入れてブロックを繰り返し、その戻り値が同じ要素をそれぞれ集めるというメソッドです。

以下のような配列があるとします

ary = [1, 1, 1, 2, 3, 3]

 

この配列を要素別にまとめてみようと思います。

p ary.group_by(&:itself)

 

とすると

 

{1=>[1, 1, 1], 2=>[2], 3=>[3, 3]}

 

のような結果となります。

(ただし、このobject.itselfはRuby2.2で公開されたものです

ので、Ruby2.2以降でないと使えません。)

 

次にこちらの要素ごと数えてそれをハッシュで返すようにすれば良いので、mapメソッドとcountメソッドを付け加えてみます。

そして最終的にハッシュで表示したいのでto_hashを加えます。

p ary.group_by(&:itself).map{ |key value| [key, value.count] }.to_h

{1=>3, 2=>1, 3=>2}

 

のようになり、

key とそのkeyの数を表示することができるようになりましたね!!

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

筆者プロフィール

町田 耕

学生時代は会計学専攻。塾講師勤務を経て、企業のCFOとして会社経営に携わる。

会社経営から一線を退いた後、インフラエンジニアの妻の勧めでプログラミングを

独学で始め、プログラミングセミナーなど転々としながら、開発案件に携わるようになる。

現在、フリーランスとして活動しながらテックアカデミーのメンターも勤めている。

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。