如果我有一个数组:
%w(a b c d e)
=> ["a","b","c","d","e"]
我可以得到一些组合
irb(main):071:0> %w(a b c d e).combination(3).to_a
=> [["a", "b", "c"], ["a", "b", "d"], ["a", "b", "e"], ["a", "c", "d"], ["a", "c", "e"], ["a", "d", "e"], ["b", "c", "d"], ["b", "c", "e"], ["b", "d", "e"], ["c", "d", "e"]]
然而,这不是所有的组合,只是唯一的组合,例如。["e", "a", "b"]
缺失
当我同样尝试使用较小的数组时,我只得到一个结果:
irb(main):059:0> %w(a b c).combination(3).to_a
=> [["a", "b", "c"]]
我怎么能得到所有6个组合,即.对于['a', 'b', 'c']
,我想得到
[['a','b','c'], ['a','c','b'], ['b', 'a', 'c'], ['b', 'c', 'a'], ['c', 'a', 'b'], ['c', 'b', 'a']
类似地,对于[1,2,3,4]
,如果我想要所有我应该得到的3位数组合
irb(main):074:0> [[1,2,3],[1,2,4],[1,3,2],[1,3,4],[1,4,2],[1,4,3], [2,1,3],[2,1,4],[2,3,4],[2,3,1],[2,4,1],[2,4,2], [3,1,2],[3,1,4],[3,2,3],[3,2,4],[3,4,2],[3,4,1]]
?
2条答案
按热度按时间ttcibm8c1#
您正在查找
permutation
而不是combination
。在组合中,我们不关心元素的顺序,只关心集合中所有元素的存在。
lsmd5eda2#
验证码:-