【问题标题】:Combine array items uniquely regarding order and duplication关于顺序和重复唯一地组合数组项
【发布时间】:2018-04-12 15:09:49
【问题描述】:

我有一个数组:

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​​ 数组/哈希魔法可以帮助我。

【问题讨论】:

    标签: arrays ruby hashmap


    【解决方案1】:

    您可以将combinationuniqsort 一起使用:

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

    Demonstration

    【讨论】:

    • 我相信这里不需要to_a
    • @sagarpandya82:是的,因为没有块的组合会返回 Enumerator 的实例而不是 Array 一个
    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多