Rubyでcombinationを使えば、組み合わせが生成される。

see. Array#combination (Ruby 3.3 リファレンスマニュアル)

使用例

numbers = [1, 2, 3, 4, 5]
numbers.combination(2).to_a
#=> [[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]

独自実装パターン

combinationメソッドを使わない実装もしてみた。

numbers = [1, 2, 3, 4, 5]
combinations = []
numbers.each_with_index do |num1, index1|
  numbers.each_with_index do |num2, index2|
    if index2 > index1
      combinations << [num1, num2]
    end
  end
end
p combinations
#=> [[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]

もっと賢く実装するなら下記。

numbers = [1, 2, 3, 4, 5]
combinations = []
numbers.each_with_index do |num1, index1|
  numbers[index1+1..].each do |num2|
    combinations << [num1, num2]
  end
end
p combinations
#=> [[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]

関連記事