我想要["a", "b", "c"].all_possibilities(4)
产生类似的东西:abc acb bac bca cab cba abca abcb abcc acba acbb acbc ...
直到最后可能的组合排列,最多4
使用abc
.
我尝试了排列,但我认为情况并非如此:%w[a b c].permutation.map &:join
只是排列,所以长度不大于三。有什么帮助吗?
我想要["a", "b", "c"].all_possibilities(4)
产生类似的东西:abc acb bac bca cab cba abca abcb abcc acba acbb acbc ...
直到最后可能的组合排列,最多4
使用abc
.
我尝试了排列,但我认为情况并非如此:%w[a b c].permutation.map &:join
只是排列,所以长度不大于三。有什么帮助吗?
关于什么 ?
class Array
def all_possibilities(range)
return permutation(range).to_a if range < size
(size..range).flat_map do |i|
permutation(range - i).flat_map do |e|
(self + e).permutation.to_a
end
end
end
end
这将返回一个字符串数组的数组。
%w(a c).all_possibilities(3)
# => [["a", "c", "a"], ["a", "a", "c"], ["c", "a", "a"],
# ["c", "a", "a"], ["a", "a", "c"], ["a", "c", "a"],
# ["a", "c", "c"], ["a", "c", "c"], ["c", "a", "c"],
# ["c", "c", "a"], ["c", "a", "c"], ["c", "c", "a"],
# ["a", "c"], ["c", "a"]]
要打印它,你可以这样做result.map(&:join).join(', ')
。
ps:您可以避免使用重复项uniq
。发生这种情况是因为您可以在像%w(a c a)
.