在订单和复制方面唯一地组合数组项

时间:2017-10-31 12:34:25

标签: arrays ruby hashmap

我有一个数组:

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数组/哈希魔法。

1 个答案:

答案 0 :(得分:6)

您可以将combinationuniqsort

一起使用
a.combination(2).to_a.uniq(&:sort)
# => [["a", "b"], ["a", "a"], ["a", "f"], ["b", "f"]]

Demonstration