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