获取数组的所有组合排列

当使用块调用时,permutation 方法产生二维数组,该数组由数字集合的所有有序序列组成。

如果在没有块的情况下调用此方法,它将返回 enumerator。要转换为数组,请调用 to_a 方法。

结果
[1,2,3].permutation #<Enumerator: [1,2,3]:permutation
[1,2,3].permutation.to_a [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
[1,2,3].permutation(2).to_a [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]
[1,2,3].permutation(4).to_a [] - >没有长度排列 4

另一方面,combination 方法在用块调用时产生二维数组,该数组由数字集合的所有序列组成。与排列不同,顺序被忽略不计。例如,[1,2,3][3,2,1] 相同

结果
[1,2,3].combination(1) #<Enumerator: [1,2,3]:combination
[1,2,3].combination(1).to_a [[1],[2],[3]]
[1,2,3].combination(3).to_a [[1,2,3]]
[1,2,3].combination(4).to_a [] - >没有长度 4 的组合

单独调用组合方法将生成一个枚举器。要获取数组,请调用 to_a 方法。

repeated_combinationrepeated_permutation 方法是相似的,除了相同的元素可以重复多次。

例如,序列 [1,1][1,3,3,1][3,3,3] 在常规组合和排列中无效。

#Combos
[1,2,3].combination(3).to_a.length 1
[1,2,3].repeated_combination(3).to_a.length 6
[1,2,3,4,5].combination(5).to_a.length 1
[1,2,3].repeated_combination(5).to_a.length 126