【问题标题】:Get k-1 length subset arrays of k length array [duplicate]获取k长度数组的k-1长度子集数组[重复]
【发布时间】:2012-09-06 12:30:26
【问题描述】:

可能重复:
ruby array element grouping

示例。给定数组a:

a = [1, 2, 3]

它的长度是 3,所以我想打印所有 2 长度的数组。它们是:

[1, 2]
[1, 3]
[2, 3]

我不知道 Ruby 中是否有一些方法可以获取子集数组。如果没有这样的方法,那么实现这一目标的最有效方法是什么。

【问题讨论】:

    标签: ruby arrays multidimensional-array


    【解决方案1】:

    这只是一个简单的combination 2 个元素:

     >> xs = [1, 2, 3]
     >> xs.combination(xs.size - 1).to_a
     => [[1, 2], [1, 3], [2, 3]]
    

    [编辑] 正如@Joshua 在评论中指出的那样,文档声明不能保证订单(!)。所以这是一个功能实现,它按照您要求的顺序生成组合。为了完整起见,我将它作为原来的 combination 方法懒惰化:

    require 'enumerable/lazy'
    
    class Array
      def combinations_of(n)
        if n == 0
          [[]].lazy
        else
          0.upto(self.size - 1).lazy.flat_map do |idx|
            self.drop(idx + 1).combinations_of(n - 1).map do |xs| 
              [self[idx]] + xs
            end
          end    
        end
      end
    end
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2019-12-25
    • 2017-01-30
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多