获取数组的所有组合排列
当使用块调用时,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_combination 和 repeated_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 |