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) }
実際に書いてみよう
それでは実際に書いてみましょう。
# 配列を宣言する 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
実行結果は以下の通りです。
[["チョコ", "抹茶"], ["チョコ", "バニラ"], ["チョコ", "いちご"], ["抹茶", "バニラ"], ["抹茶", "いちご"], ["バニラ", "いちご"]] チョコ+抹茶 チョコ+バニラ チョコ+いちご 抹茶+バニラ 抹茶+いちご バニラ+いちご
以上で解説は終わりです。組み合わせが使えると、ちょっとした計算やツール作成に役立ちます。ぜひマスターしてみてください。
筆者プロフィール
メンター金成さん
フリーランスエンジニア。 使える言語は、ruby python go 。最近はgoにハマってます。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。