Array#combination
RubyのArray#combination
は、配列内の要素の各組み合わせをすべて作る。
Array#combination (Ruby 3.1 リファレンスマニュアル)
まずはシンプルな例から。たとえば、バスケ選手が3人集まって1on1をしたいとする。3人の1on1の組み合わせを計算したいときはこんなふうに使える。
arr = %w[jason jaylen james] arr.combination(2).to_a => [["jason", "jaylen"], ["jason", "james"], ["jaylen", "james"]]
- 引数に2を渡しているので、2人組の組み合わせを返している
Array#combination
だけ書いた場合はEnumeratorオブジェクトを返す
なお、Array#combination
は["jason", "jayson"]
といった重複は返さない。
では、引数に3を渡すとどうなるか?
> arr.combination(3).to_a => [["jason", "jaylen", "james"]]
3人の組み合わせは1通りしかないので、1つの配列になって返る。
arr.combination(2).to_a
で重複を発生させたい場合はArray#repeated_combination
が使える。
Array#repeated_combination
Array#repeated_combination (Ruby 3.1 リファレンスマニュアル)
> arr = %w[jason jaylen james] # 重複が発生している > arr.repeated_permutation(2).to_a => [["jason", "jason"], ["jason", "jaylen"], ["jason", "james"], ["jaylen", "jason"], ["jaylen", "jaylen"], ["jaylen", "james"], ["james", "jason"], ["james", "jaylen"], ["james", "james"]] # combinationメソッドは重複させない > arr.combination(2).to_a => [["jason", "jaylen"], ["jason", "james"], ["jaylen", "james"]]