我有一个数组:
a = ['a', 'b', 'a', 'f']
现在想要获得两种可能的组合,但字母的顺序并不重要。因此结果应为:
[['a', 'a'],['a', 'b'],['a', 'f'],['b', 'f']]
我试过
a.product(a)
但是当然返回了所有可能的组合,而不是因为订单不重要而且应该删除双重结果:
[["a", "a"], ["a", "b"], ["a", "a"], ["a", "f"], ["b", "a"], ["b", "b"], ["b", "a"], ["b", "f"], ["a", "a"], ["a", "b"], ["a", "a"], ["a", "f"], ["f", "a"], ["f", "b"], ["f", "a"], ["f", "f"]]
我可以在循环中解决这些问题,但我想知道是否有一些可以帮助我的ruby数组/哈希魔法。
答案 0 :(得分:6)
您可以将combination
和uniq
与sort
:
a.combination(2).to_a.uniq(&:sort)
# => [["a", "b"], ["a", "a"], ["a", "f"], ["b", "f"]]