Rubyを使ったアルゴリズムについて学習しています。
今回はcombinationメソッドを使ったロジックの実装についてまとめました。
やりたいこと
数字(n個)の配列から、重複のない2個の組み合わせを選択するロジックを作成する。
出力例
n = 6 とした場合の出力例
[
[1, 2], [1, 3], [1, 4], [1, 5], [1, 6],
[2, 3], [2, 4], [2, 5], [2, 6],
[3, 4], [3, 5], [3, 6],
[4, 5], [4, 6],
[5, 6]
]
combinationメソッドとは?
今回のロジックは、combinationメソッドを使うことで簡単に作れます。
サイズ n の組み合わせをすべて生成し、それを引数としてブロックを実行します。
完成コード
n = 6
p (1..n).to_a.combination(2).to_a
コードの解説
-
このコードは、
1からnまでの数値
を組み合わせて、それぞれ2つずつの組み合わせを全て作る
もの。 -
(1..n).to_a
で1からnまでの数値を配列化している。この例だとn=6
なので、[1, 2, 3, 4, 5, 6]
って配列が作られる。
次に、その配列に対してcombination(2)
メソッドを使っている。combination(2)
は、配列の要素から2つを選び出す全ての組み合わせを生成するメソッド。この場合だと、[1,2], [1,3], [1,4], [1,5], [1,6], [2,3] ・・・
という具体的な組み合わせの配列が生成されることになる。
最後に、to_a
メソッドで結果を配列として出力している。これにより、生成された全ての組み合わせが配列として出力されることになる。
参考サイト