獲取陣列的所有組合排列

當使用塊呼叫時,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