如何在不改变数值顺序的情况下获得数组的排列?

时间:2016-07-27 17:12:42

标签: ruby permutation

对于这个数组:a = [8, 2, 22, 97, 38, 15],如何以滑动窗口的方式获取长度为3的所有子数组,而不会干扰值的顺序。?

例如,结果应为:[[8,2,22],[2,22,97],[22,97,38],[97,38,15]]

2 个答案:

答案 0 :(得分:2)

你可以传递一个像这样的参数来实现

a.each_con(3)

这将返回一个您可以迭代的枚举。要将Enumeration转换为数组,请调用to_a方法:

a.each_cons(3).to_a

答案 1 :(得分:0)

这是我提出的:

def ordered_permutations(array: [1,2,3], length: n)
  array = array.dup
  [].tap do |result|
    (array.count - (length - 1)).times do
      result << array[0..(length-1)]
      array.shift
    end
  end
end

p ordered_permutations(array: a, length: 3)