icon
icon

Rubyで組合せを計算する方法を現役エンジニアが解説【初心者向け】

初心者向けにRubyで組合せを計算する方法を現役エンジニアが解説しています。順序なしで重複なしの組合せを求めるにはcombinationメソッドを使います。順序ありや重複を許すメソッドもありますが、組合せの数が指数関数的に増加するので注意が必要です。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Rubyで組合せを計算する方法について解説します。

 
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。
 

田島悠介

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

大石ゆかり

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

田島悠介

Rubyで組合せを計算する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

Rubyのcombinationメソッドとは

combinationメソッドとは、配列からn個を選択した時の組み合わせを得ることができるメソッドです。組み合わせは、順序なし・重複無しで返されます。

ブロック処理と一緒に用いることができ、組み合わせの数だけブロックを実行します。組み合わせの計算が楽になるので、ぜひマスターしましょう。

Rubyで組合せを計算する方法

組み合わせを計算するには、配列に対してcombinationと続けることで使用します。

()の中に引数を入れ、今回のように3を渡すと1~4の4つの数字から3つ選んだ場合の組み合わせを得ることができます。

ブロック引数の中には、1通りの組み合わせが入ります。

numbers = [1,2,3,4]
numbers.combination(3){|a,b,c|
    printf("[%d %d %d]n",a,b,c)
}

 

[PR] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

それでは実際に書いてみましょう。

# 配列を宣言する
numbers = [1,2,3,4]
# combinationで組み合わせを得る。今回は4C3で4通り得られる
numbers.combination(3){|a,b,c|
    printf("[%d %d %d]n",a,b,c)
}

実行結果は以下の通りです。

[1 2 3]
[1 2 4]
[1 3 4]
[2 3 4]

ブロックを省略する場合、Enumeratorオブジェクトが返り値となります。以下のようにコーディングしてみましょう。

 

# 配列を宣言する
flavors = ["チョコ","抹茶","バニラ","いちご"]
# combinationで組み合わせを得る。今回は4C2で6通り得られる
# ブロックを使用しない場合、enumeratorオブジェクトが返される
double = flavors.combination(2)
# 配列として出力
p double.to_a

# mapメソッドでflavorsの組み合わせをくっつける
double = double.map{|flavor|
    flavor.join("+")
}.join(" ")

# 出力
puts double

 

実行結果は以下の通りです。

[["チョコ", "抹茶"], ["チョコ", "バニラ"], ["チョコ", "いちご"], ["抹茶", "バニラ"], ["抹茶", "いちご"], ["バニラ", "いちご"]]
チョコ+抹茶 チョコ+バニラ チョコ+いちご 抹茶+バニラ 抹茶+いちご バニラ+いちご

 

以上で解説は終わりです。組み合わせが使えると、ちょっとした計算やツール作成に役立ちます。ぜひマスターしてみてください。

 

筆者プロフィール

メンター金成さん

フリーランスエンジニア。
Railsの案件を中心に、様々なアプリケーションを開発してます。

使える言語は、ruby python go 。最近はgoにハマってます。

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。